Вы должны ожидать, что утверждение для функции spyied
не является действительной функцией.
Когда вы spy
для функции, действительная функция никогда не вызывается.
import * as source from '../source'; #import source object or all functions inside of it
describe('Spy on a method', () => {
it('toBeCalledOn to have been called', () => {
const spy = jest.spyOn(source, 'toBeCalledOn')
const result = source.entrypoint(0);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(0);
})
});
Если вы хотите проверить условие, вы также должны покрыть ветви, возникшие из-за этой функции.
Если у вас есть if
иelse
, тогда вам придется написать 2 теста.Пожалуйста, смотрите пример ниже.
export const entrypoint = (input)=>{
if(input !== 0){
toBeCalledOn(input);
}
}
const toBeCalledOn =(input)=>{
console.log('logs something');
}
import * as source from '../source
describe('Spy on a method', () => {
it('toBeCalledOn not to be called', () => {
const spy = jest.spyOn(source, 'toBeCalledOn')
const result = source.entrypoint(0);
expect(spy).not.toHaveBeenCalled();
});
it('toBeCalledOn to have been called', () => {
const spy = jest.spyOn(source, 'toBeCalledOn')
const result = source.entrypoint(1);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(1);
});
});
Отвечая на ваш другой запрос, я бы сказал, что мы должны assert
вещи, которые были бы очевидны.В случае, если кто-то вносит какие-либо изменения в код, и если он нарушает предыдущий поток, в этом случае вы можете обнаружить ошибку в контрольном примере.
Именно поэтому мы пишем контрольные примеры.
Также попробуйте добавить строгие утверждения, чтобы провести надежное тестирование.Например, вместо toHaveBeenCalled
вы можете использовать функцию toHaveBeenCalledTimes
, чтобы сделать утверждение более строгим.