我是Jest模拟的新手,我已经阅读了有意义的资源,但是我采用的方法不起作用。
正在测试的代码:
// @flow
import type {
RecipeAction,
CREATE_RECIPE_START
} from "../reducers/recipesReducer";
import Recipe from "../../models/Recipe";
import type { RecipeApiObject } from "../../models/Recipe";
import type { Saga } from "redux-saga";
import { put, call, takeEvery, all } from "redux-saga/effects";
export function submitRecipe(recipeObj: RecipeApiObject): CREATE_RECIPE_START {
return { type: "CREATE_RECIPE_START", recipeObj };
}
function submitRecipeApi(recipeObj: RecipeApiObject): RecipeApiObject {}
export function* submitRecipeSaga({recipeObj}: {
recipeObj: RecipeApiObject
}): Saga<void> {
const response = yield call(submitRecipeApi, recipeObj);
yield put(response);
}
export default function* recipeSaga(): Saga<void> {
yield all([yield takeEvery("CREATE_RECIPE_START", submitRecipeSaga)]);
}
我正在尝试测试submitRecipeSaga
,而没有触及最终将调用该API的submitRecipeApi
。
// @flow
import mockRecipes from "../../src/api-data/recipes";
import recipeSaga, {
submitRecipeSaga
} from "../../src/redux/actions/recipeActions";
import recordSaga from "../../recordSaga";
import type { CREATE_RECIPE_START } from "../../src/redux/reducers/recipesReducer";
describe("submitRecipeSaga", () => {
it("returns a fully constructed recipe object on success", async () => {
const submitRecipeApi = jest.fn().mockImplementation(() => {
console.log("mock hello");
return { type: "mock return" };
});
const startAction: CREATE_RECIPE_START = {
type: "CREATE_RECIPE_START",
recipeObj: mockRecipes[0]
};
const dispatched = await recordSaga(submitRecipeSaga, startAction);
expect(dispatched).toContainEqual({ type: "mock return" });
});
});
测试失败,已命中submitRecipeApi
,返回未定义,并且未记录“模拟问候”
但是,由于各种原因,我想到的尝试方式却行不通:
const submitRecipeApi = jest.fn().mockImplentation(...)
-
使用上面编写的代码,mock函数似乎没有被击中。
导出submitRecipeApi
并将其导入测试文件,并按原样保留代码(与#1中相同),其结果与#1相同。奇怪的是,const submitRecipeApi
的重新声明不会引起任何错误。
导入为#2,但删除const
,将submitRecipeApi = jest.fn()
从声明更改为赋值。这给出了错误"submitRecipeApi" is read-only.
不导入submitRecipeApi
,并且像#3中那样进行简单分配。错误:ReferenceError: submitRecipeApi is not defined
我在做什么错了?