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