【发布时间】:2017-06-19 10:21:53
【问题描述】:
我正在使用mocha 作为测试框架,我正在尝试模拟一个使用fetch 的DELETE 请求,以针对返回HTTP 状态代码204 的端点。
这里是测试代码:
it('should logout user', (done) => {
nock(<domain>)
.log(console.log)
.delete(path)
.reply(204, {
status: 204,
message: 'This is a mocked response',
});
api.logout(token)
.then((response) => {
console.log('IS DONE?--->', nock.isDone());
console.log('RESPONSE--->', response);
done();
})
.catch((error) => {
console.log('ERROR--->', error);
});
});
这将返回以下输出:
matching <domain> to DELETE <domain>/<path>: true
(the above line being generated by the .log method in nock)
IS DONE?---> true
RESPONSE---> {}
如您所见,请求被log()和isDone()nock方法正确拦截,但是返回的response对象是一个空对象,因此无法对返回的HTTP进行断言状态码(在本例中为204)
知道我在这里可能遗漏了什么吗?为什么reply() 方法返回一个空对象?
更新
这是logout 方法的代码,remove 方法是使用DELETE HTTP 方法的fetch 请求的包装器。
logout(token) {
return remove(
this.host,
END_POINTS.DELETE_TOKEN,
{
pathParams: { token },
},
{
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
);
}
【问题讨论】:
-
api.logout的代码是什么?这似乎不是nock提供的东西。在我看来那里可能有错误。 -
它代表端点的
DELETEHTTP 方法,它工作正常并且它似乎被正确拦截,如输出所示,我已经更新了问题以包含代码,我做了之前不要包含它以避免混淆。
标签: unit-testing mocha.js fetch interceptor nock