【发布时间】:2019-08-26 10:54:26
【问题描述】:
我使用 NockJS 和 Jest 为反应应用程序编写了一个简单的 API 调用单元测试,如下所示:
AjaxService.js
export const AjaxService = {
post: (url, data, headers) => {
return axios({
method: "POST",
url: url,
headers: headers || { "content-type": "application/json" },
data: data
});
},
};
API 承诺:
export const getDashboard = (request) => {
return AjaxService.post(API_DASHBOARD_URL + "/getDashboard", request
).then(
response => {
return response.data;
},
(error) => {
return error.response.data;
}
)
};
使用 NockJS 进行单元测试:
nock(baseUrl)
.post(subUrl, request)
.reply(200, response);
getDashboard(request)
.then(resp => {
let compareVal = getNestedObject(resp, keyToCompare);
let actualVal = getNestedObject(response, keyToCompare);
expect(compareVal).to.equal(actualVal);
})
.then(() => {});
但是当使用 Jest --coverage 生成代码覆盖率报告时,如下所示:
我们可以看到,在promise中,成功回调和错误回调在单元测试期间没有被调用。当应用程序有大量 API 调用时,如何覆盖这部分代码,因为它会影响代码覆盖率?还是我没有正确测试?请帮忙,因为我是单元测试的新手。提前致谢。
【问题讨论】:
-
只是为了确认,传递给 nock 的
baseUrl值是相同的API_DASHBOARD_URL对吗?我想确保您模拟的是来自应用的出站请求,而不是应用的入站请求。 -
是的! BaseUrl 和 API_DASHBOARD_URL 是一样的。
-
什么是
AjaxService?您是否尝试过弄乱成功回调的内容以查看测试是否仍然通过? -
AjaxService 将返回 axios 实例。不,我没有尝试更改回调的任何内容。我已经更新了问题。请检查。
标签: javascript reactjs jestjs code-coverage nock