我想監視 functionTwo,但 functionTwoSpy 沒有檢測到何時呼叫 functionTwo 并且測驗失敗。
這是我想做的一個簡化示例:
describe('', () => {
const object = {
functionOne: () => ({
functionTwo: () => {}
})
};
const execute = object => object.functionOne().functionTwo();
it('should be call functionOne', () => {
const functionOneSpy = jest.spyOn(object, 'functionOne');
execute(object);
expect(functionOneSpy).toHaveBeenCalled();
});
it('should be call functionTwo', () => {
const functionTwoSpy = jest.spyOn(object.functionOne(), 'functionTwo');
execute(object);
expect(functionTwoSpy).toHaveBeenCalled();
});
});
錯誤是這樣的:
? should be call functionOne (2 ms)
? should be call functionTwo (3 ms)
● ? should be call functionTwo
expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
21 | execute(object);
22 |
> 23 | expect(functionTwoSpy).toHaveBeenCalled();
| ^
24 | });
25 | });
at Object.<anonymous> (core/decorators/auth/test.spec.ts:23:28)
at runMicrotasks (<anonymous>)
有什么推薦嗎?謝謝
uj5u.com熱心網友回復:
每次functionTwo使用該functionOne方法時,都會回傳一個新的functionTwo. 這包括 withjest.spyOn所以目前無法每次都獲得相同的實體。您可以做的是分配一個 jest 模擬函式,functionTwo以便您可以斷言稍后呼叫了該模擬函式。
describe('', () => {
const funcTwoMock = jest.fn()
const object = {
functionOne: () => ({
functionTwo: funcTwoMock
})
};
const execute = object => object.functionOne().functionTwo();
it('should be call functionOne', () => {
const functionOneSpy = jest.spyOn(object, 'functionOne');
execute(object);
expect(functionOneSpy).toHaveBeenCalled();
});
it('should be call functionTwo', () => {
execute(object);
expect(funcTwoMock).toHaveBeenCalled();
});
}
現在,即使functionTwo每次都是一個新實體,它總是指向同funcTwoMock一個 jest 正確跟蹤的實體
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520987.html
上一篇:無法實體化型別為“UserServiceImpl”的名為“userService”的@InjectMocks欄位。您尚未提供實體
