У меня есть createPostSaga, который POST
с моим API, и я пытаюсь проверить его.Это сага:
export function* createPostSaga(action) {
const token = yield select(selectToken);
const headerParams = {
Authorization: `JWT ${token}`
};
const apiCall = () => {
let formData = new FormData();
formData.append("title", action.payload.title);
formData.append("content", action.payload.content);
formData.append("thumbnail", action.payload.thumbnail);
formData.append("tags", JSON.stringify(action.payload.tags));
formData.append("slug", generateSlug(action.payload.title));
return axios({
method: "post",
url: "/posts/",
data: formData,
headers: headerParams
})
.then(response => response.data)
.catch(err => {
throw err;
});
};
try {
const response = yield call(apiCall);
yield put(push(`/posts/${response.id}/${response.slug}/`));
} catch (error) {
console.log(error);
}
}
, и это код, который у меня до сих пор не работает:
describe("createPostSaga", () => {
const action = {
type: types.CREATE_POST,
payload: {
title: "test title",
pub_date: "2018-11-12",
content: "test content",
tags: ["test1", "test2"],
thumbnail: "http://fail",
slug: "test-title"
}
}
const apiCall = () => ({
id: 1,
...action.payload
});
it("calls the api and redirects", () => {
testSaga(actions.createPostSaga, action)
.next()
.select(selectToken)
.next()
.call(apiCall)
.next()
.put(push("/posts/1/test-title/"))
.finish()
.isDone();
})
})
Когда я тестирую этот код, я получаю следующую ошибку:
SagaTestError:
Assertion 2 failed: call effects do not match
Expected
--------
{ context: null, fn: [Function: apiCall], args: [] }
Actual
------
{ context: null, fn: [Function: apiCall], args: [] }
Как видите, ожидаемые и фактические результаты совпадают.
Я также попытался напрямую скопировать и вставить функцию apiCall
в мой тест, но она не удалась с тем же сообщением, и я в тупике.