[英]Mocking an import in Jest
我有以下測試:
const mockedObject = {
mockedMethod: jest.fn((someKey, someValue) => {
return {someKey: 'someValue'}
})
};
jest.doMock('../myObject', () => {
return mockedObject;
});
testedObject.testedMethod();
expect(mockedObject.mockedMethod).toHaveBeenCalled();
在這里,在testedObject
,我正在導入myObject
。 我想模擬該導入並mockedObject instead
傳遞mockedObject instead
。
細算這個問題,並且這個問題 ,我覺得上面的代碼應該是不錯的,但是mockedObject.mockedMethod
不會被調用即使testedObject
進行調用。
那么,此測試中進行的模擬有什么問題呢?
你打電話
testedObject.testedMethod()
但期待
mockedObject.mockedMethod)
試試這個代碼:
const mockedObject = {
testedMethod: jest.fn((someKey, someValue) => {
return {someKey: 'someValue'}
})
};
jest.doMock('../myObject', () => {
return mockedObject;
});
testedObject.testedMethod();
expect(mockedObject.testedMethod).toHaveBeenCalled();
我可以想到一些選擇。
可能發生的一件事是,您在測試對象需要導入后對其進行模擬,而您無法對其進行修改。 如果是這種情況,請確保僅在修改程序包之后才創建對象的實例。
另一種選擇是創建一個文件夾嘲弄 ,並創建一個文件名為名為.js酷似你的模塊或進口,然后返回你需要什么。 這最適合全局依賴項。
最后,您還可以做的是使您的測試對象將依賴項作為參數接收,因此您可以覆蓋文件內部的導入。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.