2017-03-10 1 views
1

ich in cucumber.jsGurke js dann werfen nicht Ausfall

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

}) einen kleinen Test zu schreiben;

Jetzt, wenn ich den Test durchführe, geht es weiter. Ich habe sogar versucht, einen Callback in Then zu haben, aber trotzdem geht es weiter, obwohl der Expect eine Ausnahme wirft.

Vermisse ich irgendwo einen Handler. Ich bin ein absoluter Neuling für diese Art der Programmierung.

+0

Nicht sicher, was Ihre "fetch" -Funktion tut, aber vorausgesetzt, Ihr Code tut, was Sie denken, dass es tut, vermissen Sie eine Rückkehr in Ihrem "dann" Schritt: 'return githubResponse.then ...'. Ohne eine Rückkehr wird die Gurke die Funktion beenden, ohne auf die Ausführung und den Abschluss des Aufrufs zu warten, und wird somit immer erfolgreich sein. – joniba

Antwort

1

Also vielleicht ist das Problem, dass die spec for fetch sagt, dass es nicht fehlschlägt, wenn es einen 404 gibt. So perhaps you need to write a wrapper around it to deal with this. Hier ist meine Version:

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

ich dies nur im Browser-Konsole bis verspottet haben, so bin ich nicht sicher, dass dies perfekt. Bitte lassen Sie mich wissen, ob das hilft oder was Sie getan haben, um es zu lösen.

Verwandte Themen