我有一個案例:
test.js
import { today } from "utils/date";
import myFunction from "helpers/myFunction";
it('should work properly', () => {
jest.mock('utils/date', () => ({
...(jest.requireActual('utils/date')),
today: jest.fn(() => '01-01-2020'),
}));
console.log(today()); // still logs current date 14-10-2021, not the mocked date
expect(myFunction()).toEqual(today());
});
myFunction.js
import { today } from "utils/date";
export const myFunction = () => today();
today是一個回傳今天日期的函式。但出于測驗目的,我需要該函式始終回傳相同的日期,例如"01-01-2020".
注意:正如您所看到的,“today”函式在測驗中以及在被測驗的 (myFunction) 函式中使用,因此它必須像應用程式中的任何地方一樣回傳相同的模擬值。
謝謝
uj5u.com熱心網友回復:
jest.mock()在測驗用例功能范圍內呼叫。模塊匯入被提升(在內部移動到當前范圍的開頭)。在模擬模塊today之前匯入原始函式。jest.mock()utils/date
您可以將jest.mock()測驗用例功能范圍移動到模塊范圍。Jest 會自動將jest.mock呼叫提升到模塊的頂部(在任何匯入之前)。因此,當您匯入該today函式時,它已經被模擬了。
請參閱與 ES 模塊匯入一起使用:
如果您使用 ES 模塊匯入,那么您通常會傾向于將您的
import陳述句放在測驗檔案的頂部。但通常你需要在模塊使用之前指示 Jest 使用模擬。出于這個原因,Jest 會自動將jest.mock呼叫提升到模塊的頂部(在任何匯入之前)。
import { today } from 'utils/date';
jest.mock('utils/date', () => ({
today: jest.fn(() => '01-01-2020'),
}));
it('should work properly', () => {
expect(jest.isMockFunction(today)).toBeTruthy();
expect(today()).toBe('01-01-2020');
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324864.html
標籤:javascript 反应 单元测试 玩笑
上一篇:如何為在其中創建物件并將其傳遞給模擬物件的方法撰寫單元測驗?
下一篇:如何使用sinonjs/loopbacktestlab從twilio-node模擬messages.create()方法的回傳值?
