#reactjs #unit-testing #jestjs #enzyme
Вопрос:
У меня есть функция, определенная следующим образом:
import React, { useState } from 'react';
export function TestFunc(props) {
const [var1, setVar1] = useState(undefined);
const functionA = (a, b) => {
return a b;
};
};
Теперь я хотел бы провести модульный тест functionA
, я попробовал следующий синтаксис, но он не сработал:
import * as TestFunc from './TestFunc';
describe('test test function', () => {
test('function A', () => {
expect(TestFunc.functionA(2, 3)).toBe(5);
});
});
Каков правильный синтаксис для TestFunc.functionA
работы?
Ответ №1:
functionA
в настоящее время является частным для TestFunc
. Реорганизуйте свой код таким образом, чтобы вы экспортировали functionA
, т. е.
import React, { useState } from 'react';
export const functionA = (a, b) => (a b);
export function TestFunc(props) {
const [var1, setVar1] = useState(undefined);
};
Как только вы это сделаете, вы сможете протестировать functionA
, например
import { functionA } from './TestFunc';
describe('test functionA', () => {
test('that is behaves as expected', () => {
expect(functionA(2, 3)).toBe(5);
});
});
Комментарии:
1. Нет, я не смогу так переработать код, я не владею кодом, я только тестирую его.
2. О, хорошо. В этом случае вы застряли, так как функция фактически не вызывается внутри TestFunc, она просто определена.
3. спасибо за ваш ответ, мне нужно обсудить это с автором кода.
4. Я еще раз взглянул на код,
functionA
который на самом деле был определен какconst functionA = (props.a, props.b) => {return props.a props.b}
. В этом случае я не смогу провести рефакторинг кода, верно?5. не могу экспортировать две вещи одновременно, нужно использовать {function ,TestFunc}
Ответ №2:
попробуйте выполнить mount
эту функцию, а затем попробуйте вызвать функцию,
it('function A', () => {
const wrapper = mount(<TestFunc />);
expect(wrapper.find('functionA ')).toHaveLength(1);
});