黄瓜js然后没有失败

时间:2017-03-10 15:27:34

标签: javascript chai cucumberjs

我在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中进行回调,但它仍然继续传递,尽管期望是抛出异常。

我在任何地方都错过了任何处理程序。对于这种编程风格,我完全是新手。

1 个答案:

答案 0 :(得分:1)

所以问题可能是fetch的spec表示当有404时So perhaps you need to write a wrapper around it to deal with this没有失败。enter image description here。这是我的版本:

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); 
});

我只是在浏览器控制台中嘲笑了这一点,所以我不确定这是完美的。如果这有助于解决问题,请告诉我。