Я недавно хотел проверить, что некоторые пользовательский метод получает условно называемых в componentDidMount` метод компонент реагировать.
componentDidMount() {
if (this.props.initOpen) {
this.methodName();
}
}
Я'м, используя шутку, как моя система тестирования, которая включает в себя шутку.ФН () на глумится/шпионы. Я'вэ читал, что это было бы тривиально, чтобы проверить с Синон, делая что-то вроде следующего:
sinon.spy(Component.prototype, "methodName");
const wrapper = mount(<Component {...props} />);
expect(wrapper.instance().methodName).toHaveBeenCalled();
Я'м пытаясь воссоздать это с шуткой, Вот так:
Component.prototype.methodName = jest.fn();
const wrapper = mount(<Component {...props} />);
expect(wrapper.instance().methodName).toHaveBeenCalled();
Этот код не выполняется и выдает следующее сообщение об ошибке:
jest.fn() value must be a mock function or spy.
Received:
function: [Function bound mockConstructor]
Можно ли проверить эту функцию с шуткой? И если да, то как?
Ключ, используя метод прибауток spyOn
. Она должна быть такой:
const spy = jest.spyOn(Component.prototype, 'methodName');
const wrapper = mount(<Component {...props} />);
wrapper.instance().methodName();
expect(spy).toHaveBeenCalled();
Как найти здесь, например: https://stackoverflow.com/questions/40393486/test-if-function-is-called-react-and-enzyme
Обратите внимание это также рекомендуется очистить подсмотрел функцию после каждого теста
let spy
afterEach(() => {
spy.mockClear()
})
https://facebook.github.io/jest/docs/en/jest-object.html#jestclearallmocks
Я знаю, что немного поздно, но я сталкивался с этим и хотел бы предложить, чтобы проверить componentDidMount
инициирует звонок на ваш гнездовым способом, что ваш тест должен выглядеть примерно так:
Модуль
componentDidMount() {
if (this.props.initOpen) {
this.methodName();
}
}
Тест - Хороший
it('should call methodName during componentDidMount', () => {
const methodNameFake = jest.spyOn(MyComponent.prototype, 'methodName');
const wrapper = mount(<MyComponent {...props} />);
expect(methodNameFake).toHaveBeenCalledTimes(1);
});
Если вы называете componentDidMount, то утверждение, что
имя_методаназывалась ВИА
componentDidMount` является более допустимого.
Тест - Плохой
it('should call methodName during componentDidMount', () => {
const spy = jest.spyOn(Component.prototype, 'methodName');
const wrapper = mount(<Component {...props} />);
wrapper.instance().methodName();
expect(spy).toHaveBeenCalled();
}
Написав тест, как это - вызвать метод, а потом утверждать, что это называлось. Что, конечно, это будет просто назвать его.