【发布时间】:2017-02-04 00:14:53
【问题描述】:
我正在尝试从请求模块测试 GET HTTP 方法:
const get = (host, resource, options) => {
...
return new Promise((resolve, reject) => fetch(url, opts)
.then(response => {
if (response.status >= 400) {
reject({
message: `[API request error] response status: ${response.status}`,
status: response.status });
}
resolve(response.json());
})
.catch(error => reject(error)));
};
这是我测试.then 部分的方法:
it('Wrong request should return a 400 error ', (done) => {
let options = { <parameter>: <wrong value> };
let errorJsonResponse = {
message: '[API request error] response status: 400',
status: 400,
};
let result = {};
result = get(params.hosts.api, endPoints.PRODUCTS, options);
result
.then(function (data) {
should.fail();
done();
},
function (error) {
expect(error).to.not.be.null;
expect(error).to.not.be.undefined;
expect(error).to.be.json;
expect(error).to.be.jsonSchema(errorJsonResponse);
done();
}
);
});
但是我没有找到测试 catch 部分的方法(当它给出错误并且响应状态不是 >= 400 时)。
有什么建议吗?
它还可以帮助我解决问题,这是一个简单的示例,使用另一个测试 Promise 的 catch 部分的代码。
【问题讨论】:
-
例如,您可以在 url 中捕获带有无效协议的异常。尽管为规范存根
fetch会更有效。顺便说一句,代码是 promise 构造函数反模式,它可能只是return fetch(...).then(...).catch(...)。
标签: unit-testing promise ecmascript-6 mocha.js chai