簡體   English   中英

對Jest做出反應的單元測試:如何模擬來自不同功能的動作?

[英]Unit tests on react with Jest: how to mock an action from different feature?

我目前正在使用我的一個React服務上的Jest進行單元測試(使用redux-saga)。 這些服務調用API,選擇器和動作,而該API,選擇器和動作不在此服務特定的其他API,選擇器和動作之外。

因此,為了模擬這些外部API,選擇器和操作,我用玩笑來在我的測試文件中模擬它們,如下所示:

// API mock example
jest.mock('../otherFeatureService/api'), () => {
    return { myApi: jest.fn() };
}

// reducer mock example
jest.mock('../otherFeatureService/reducer'), () => {
    return { isConnected: (fake) => jest.fn(fake) };
}

// API action example
jest.mock('../otherFeatureService/actions'), () => {
    return { myAction: () => jest.fn() };
}

在我的測試中,除模擬操作外,其他所有功能均正常運行。 但是,當我嘗試將預期結果與模擬操作得到的結果進行比較時,收到以下消息:

expect(received).toEqual(expected)

Expected value to equal:
  {"@@redux-saga/IO": true, "PUT": {"action": [Function mockConstructor], "channel": null}}
Received:
  {"@@redux-saga/IO": true, "PUT": {"action": [Function mockConstructor], "channel": null}}

Difference:

Compared values have no visual difference.

您是否對為什么它不僅僅適用於動作有任何想法? (我正在使用來自“ redux-saga-testing”的sagaHelper進行測試)

謝謝。 printfx000。

您正在遇到此問題,因為開玩笑無法在2個匿名函數之間產生區別。 為了解決這個問題,您需要為模擬提供一個命名函數。 因為開玩笑的葫蘆模擬聲明,所以您需要模擬中聲明您的命名函數。

jest.mock('../selectors', () => {

    function mockedMakeSelectCoverageResult() {}

    return ({
        makeSelectCoverageResult: () => mockedMakeSelectCoverageResult,
    });

});

expect(descriptor).toEqual(select(makeSelectCoverageResult()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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