Лучший подход к тестовой саге с несколькими диспетчерами действий - PullRequest
0 голосов
/ 17 января 2020

У меня есть сага, которая вызывается наблюдателем, когда я пишу его тестовый скрипт, вызываемая rootSaga пытается вызвать ее с неопределенной функцией, не получая подсказки, почему эта root сага вызывается, когда я только тестирую моя функция генератора.

По сути, моя функция генератора отвечает за вызов API с вызовом make и api и возвращает ответ, в случае успеха отправляется другое действие. Какой может быть лучший подход для тестирования этих видов множественной диспетчеризации и обработки состояний.

Error.log

*

TypeError: saga_8.watchForGetProjectDetails is not a function
        at ../src/app/duck/rootSaga.tsx:65:28

*

Saga.tsx

export function* fetchProjectDetails(action: AnyAction) {
    const { Code = "" } = getContext();
    const payload = {
        Id: action.payload,
        // tslint:disable-next-line:object-shorthand-properties-first
        Code,
    };
    const response = yield call(Apis.getProjectDetail, payload);

    if (response.status === 200) {
        const resp: ProjectMetaDataInResponseInterface = response.data.data;
        const selectedDomain = resp.domain[0];
        /** store MetaData In localStorage
         * this should be removed once login is moved from Angular to React code base
         */

        yield put(setDomainInContext(selectedDomain));
    }
}

export function* watchForGetProjectDetails() {
    yield takeEvery(actionTypes.GET_PROJECT_DETAILS, fetchProjectDetails);
}

rootSaga.ts

export default function* rootSaga() {
    yield all([
                 watchForGetProjectDetails()
   ])
}

Мой тестовый скрипт

import { expectSaga } from "redux-saga-test-plan";
import { fetchProjectDetails } from "../ducks/saga";
import ActionType from "../../app/duck/actions";
import actionTypes from "../ducks/actions";

describe("Saga Test Suit", () => {
    it("Should return project domain", async () => {
        const api = {
            getProjectDetail: { projectId: 1, tenantCode: "iquanti" },
        };
        return expectSaga(fetchProjectDetails, api)
            .put({
                type: ActionType.SET_DOMAIN_IN_CONTEXT,
                payload: "google.com",
            })
            .dispatch({
                type: actionTypes.GET_PROJECT_DETAILS,
                payload: 1,
            })
            .run();
    });
});
...