Фрагмент кода ниже - это мои транзакции. Я могу использовать __mocks__
, чтобы высмеивать функцию doFetchTransactions
, но она охватывает только счастливый случай didFetchTransactionsSuccessful
. Как сделать так, чтобы это также покрывало неудачный случай?
import { doFetchTransactions as networkFetchTransactions } from "../../utilities/api";
export const ACTION_TYPE = {
FETCH_TRANSACTIONS_SUCCESS: "FETCH_TRANSACTIONS_SUCCESS",
FETCH_TRANSACTIONS_FAILED: "FETCH_TRANSACTIONS_FAILED"
};
export const doFetchTransactions = () => {
return dispatch => {
const handleReslove = response => {
const transactions = response;
dispatch(didFetchTransactionsSuccessful(transactions));
};
const handleReject = error => {
dispatch(didFetchTransactionsFailed());
};
return networkFetchTransactions(handleReslove, handleReject);
};
};
const didFetchTransactionsSuccessful = transactions => {
return {
type: ACTION_TYPE.FETCH_TRANSACTIONS_SUCCESS,
transactions
};
};
const didFetchTransactionsFailed = () => {
return {
type: ACTION_TYPE.FETCH_TRANSACTIONS_FAILED
};
};
То, что я пытаюсь сделать, но не удалось (я думаю, это вызвано require
зависимостью от загрузки только один раз),
import { mockStore } from "../store/mockStore";
describe("Actions for Transactions", () => {
beforeEach(() => {
jest.clearAllMocks();
});
it("should create correct action when transaction fetching success", async () => {
const mockApiFunctions = () => ({
doFetchTransactions: jest.fn(handleSuccess => handleSuccess([]))
});
jest.mock("../../utilities/api", () => mockApiFunctions());
const { doFetchTransactions } = require("./transactions");
const store = mockStore();
await store.dispatch(doFetchTransactions());
const actions = store.getActions();
expect(actions).toEqual([{ transactions: [], type: "FETCH_TRANSACTIONS_SUCCESS" }]);
});
it("should create correct action when transaction fetching failed", async () => {
const mockApiFunctions = () => ({
doFetchTransactions: jest.fn((_, handleReject) => handleReject("Error"))
});
jest.mock("../../utilities/api", () => mockApiFunctions());
const { doFetchTransactions } = require("./transactions");
const store = mockStore();
await store.dispatch(doFetchTransactions());
const actions = store.getActions();
expect(actions).toEqual([]);
});
});