У меня есть сага, которая вызывается наблюдателем, когда я пишу его тестовый скрипт, вызываемая 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();
});
});