【发布时间】:2021-04-02 08:35:48
【问题描述】:
我一直在向 React 项目添加测试,当我使用 toHaveBeenCalledWith 方法时,我一直受到轻微语法错误的困扰。我实际上并不关心语法是否完全正确,我只是想确保它包含所需的消息。
it("catches the error if network error occurs", async () => {
let errorMessage = "There has been a network error";
mockAxios.post.mockImplementationOnce(() => Promise.reject(new Error(errorMessage)))
snackbarSetter = jest.fn()
const service2 = new ReleaseFormService();
await service2.addReleases(releasesURL, releasesBody, headers, pushNewReleases, toggleLoading, snackbarSetter);
expect(snackbarSetter).toHaveBeenCalledTimes(1)
expect(snackbarSetter).toHaveBeenCalledWith(['Error :' + errorMessage], "error")
})
此测试失败并显示消息 -
Expected: ["Error :There has been a network error"], "error"
Received: [Error: There has been a network error], "error"
这是单元测试第三次大部分成功但由于微小差异而失败。所以现在我正在寻找使用精确语法的方法,但到目前为止,我将 stringContaining 方法与 HaveBeenCalledWith 结合起来的努力没有结果。
有什么建议吗?需要明确的是,我不需要帮助完成这个我已经重构以通过的特定测试,而是为了节省未来测试的时间。
【问题讨论】:
-
您是否尝试将抛出的
Error对象作为prop传递给snackbarSetter? -
不是包含字符串的数组,而是实际错误对象的表示方式。
-
使用正则表达式匹配消息。