我在cucumber.js写了一个小测试
defineSupportCode(function({Given, When, Then}){
Given(/^I have a valid github username $/, function(callback){
githubUserName = 'test';
callback();
});
When('I call username api', function(callback){
let url = githubUrl+githubUserName;
let response;
var data;
githubResponse = fetch(url)
.then(res => res.json())
.then(json => {return json});
callback();
});
Then('I get userdetails', function(){
githubResponse.then(function(data){
console.log(data.name);
expect(data.name).to.equal("abc");
});
});
});
现在,当我运行测试时,它会继续传递。我甚至尝试在Then中进行回调,但它仍然继续传递,尽管期望是抛出异常。
我在任何地方都错过了任何处理程序。对于这种编程风格,我完全是新手。
答案 0 :(得分:1)
所以问题可能是fetch的spec表示当有404时So perhaps you need to write a wrapper around it to deal with this没有失败。。这是我的版本:
function myFetch(url, options) {
if (options == null) options = {};
return fetch(url, options).then(function(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response);
} else {
var error = {};
error.response = response;
error.status = response.status;
return Promise.reject(error);
}
});
}
Now when you call the "then" you can write a catch to find your 404:
fetchPromise.then(function(response) {
console.log(response.status); })
.catch(function(error) {
console.log("problem: ", error.status);
});
我只是在浏览器控制台中嘲笑了这一点,所以我不确定这是完美的。如果这有助于解决问题,请告诉我。