簡體   English   中英

使用 jest 測試 redux saga 方法中的問題

[英]testing issue in redux saga method using jest

我正在使用 jest 測試我的 redux saga 方法。 我面臨一些問題。 附加 saga 方法、測試用例和控制台響應。

讓我知道我錯過了什么。 嘗試了很多谷歌搜索。 但是找不到任何解決方案。

任何幫助,將不勝感激。

謝謝!

/* saga method starts*/
export function* fetchStripeLocations() {
    console.log('saga fetchStripeLocations called:');
    try {
        const BE = yield select((state) => state.BE);
        const PaymentRequestFormReducer = yield select(state => state.PaymentRequestFormReducer.toJS());
        const { stripeLocationsMap } = PaymentRequestFormReducer;
        const paymentsEnabled = isPaymentsEnabled(BE);

        if (!stripeLocationsMap.data && !stripeLocationsMap.isLoading && paymentsEnabled) {
            yield put(actionCreator.fetchingStripeLocations());
            const url = actionCreator.URL.FETCH_STRIPE_LOCATIONS;
            const response = yield call(beAPIResource.get, url, {}, { topLoader: false, isPrimaryAPI: false, cancellable: false });
            const { qcrEnabled, stripeLocationsMap } = response.data;
            yield put(actionCreator.setStripeLocations({ qcrEnabled, stripeLocationsMap }));
        }
    } catch (e) {
        yield put(actionCreator.setStripeLocations({ stripeLocationsMap: {} }));
        yield put(dataFetchingError(e, "Something went wrong please try again later"));
    }
}
/* saga method ends*/

/* test case starts*/
import { testData } from "./TestReducerData";
import { commonTestData } from "../../../../../../__test__/commonTestData";

test('fetchStripeLocations testing should pass', async () => {
    const dispatchedActions = [];
    const stripeDummyData = iMap({
        isLoading: false,
        data: null,
        qcrEnabled: false
    });

    const mockData = { 
        qcrEnabled : false, 
        stripeLocationsMap: {
            isLoading: false,
            data: null,
            qcrEnabled: false
        }
    };

    const mRequest = jest.fn(() => Promise.resolve(mockData));
    const mockState = {
        BE: commonTestData,
        PaymentRequestFormReducer: testData.initialState
    };
    await runSaga({
            dispatch: (action) => dispatchedActions.push(action),
            getState: () => mockState,
        }, PaymentRequestFormSaga.fetchStripeLocations).done;
    console.log('dispatchedActions', dispatchedActions);
    console.log('mRequest.mock:', mRequest.mock);
    expect(mRequest.mock.calls.length).toBe(1);

    expect(dispatchedActions).toEqual([ActionCreator.setStripeLocations(mockData)]);
});
/* test case ends*/

在此處輸入圖像描述 在此處輸入圖像描述

toBe就像一個引用檢查,但這兩個對象當然不是同一個實例。 toBe很少是對象的正確選擇

使用.toBe 比較原始值或檢查 object 個實例的引用身份。 它調用 Object.is 來比較值,這比 === 嚴格相等運算符更適合測試。

您可以將jest-immutable-matchers添加到您的項目中以比較 immutable-js 對象的值相等性

import * as matchers from 'jest-immutable-matchers';

describe('My suite', function () {
  beforeEach(function () {
    expect.extend(matchers);
  });

  it('passes if the immutable objects are equal', function () {
    expect(Immutable.Map({a: 1})).toEqualImmutable(Immutable.Map({a: 1}));
  });
});

如果您想自己測試兩個不可變對象的相等性,請使用Immutable.is ,例如Immutable.is(Immutable.Map({a: 1}), Immutable.Map({a: 1}))

暫無
暫無

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

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