簡體   English   中英

在Jest中模擬導入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM