2016-09-08 1 views
0

Ich versuche, fail Bedingung in meinem Schnipsel aufzurufen. Aber wenn ich sinon.stub().throws() Methode verwende Es zeigt mir Fehler. Kann nicht in Code umgehen. Hier ist mein Code-Schnipsel:Wie man sinon.stub() behandelt. Throws() im Komponententest von Sinon JS

login() { 
    let loginData = this.loginData; 
    return this.authService.login(loginData).then(userData => { 

     let msg = `${this.niceToSeeYouAgain} ${userData.email}!`; 
     this.userAlertsService.showSuccessToast(msg); 
     this.navigationService.afterLoggedIn(); 

     //above lines are covered in test cases 

    }, errorInfo => { 
     // below line are needed to test 
     this.userAlertsService.showAlertToast(errorInfo); 
    }); 
} 

** Und hier ist meine Unit-Test-Schnipsel: **

it('.login() - should throw exception - in failure case', sinon.test(() => { 

    let errorInfo = "some error"; 

    let stub = sinon.stub(authService, 'login').throws(); 

    let spy1 = sinon.spy(controller.userAlertsService, 'showAlertToast'); 


    //call function 
    controller.login(); 
    // $timeout.flush(); 

    // expect things 
    console.log(stub.callCount, stub.args[0]); 

    })); 

Bitte lassen Sie mich wissen, was falsch Diese Frage

Antwort

0

tue, ist ein Monat alt seit dieser Antwort, aber ich stieß auf einen ähnlichen Fehler, und Google hat keine Erklärung für dieses Verhalten ergeben. Ich wollte auch den Fehler-Zweig meiner Anmeldung testen, und stub.throws() tatsächlich warf den Fehler (wodurch der Test fehlschlägt), anstatt die Login-Versprechen abzulehnen. Wenn jemand weiß, warum das passiert, würde ich es begrüßen.

In jedem Fall ist es das, was für mich gearbeitet:

let d = Q.defer();   // Or whichever promise library you use 
d.reject();     // Force the promise to fail 
let stub = sinon.stub(authService, 'login').returns(d.promise); // Should do what you want 
// The rest of the test 
+0

ein ähnliches Problem haben mit Würfen und Versprechungen auf einem mock.I'm die API unter der Annahme ist die gleiche . Verwenden Sie 'rejects' anstelle von' throws' aus dem Stub. –

0

Sie benötigen die Funktion wickeln, dass Sie wissen, scheitern wird, und dann call es. z.B.

it('handles errors in methodThatCallsAnotherFailingMethod', function() { 
    error = new Error("some fake error"); 
    sandbox.stub(SomeObject, "doSomething").throws(error); 

    call = function() { 
    // methodThatCallsAnotherFailingMethod calls SomeObject.doSomething() 
    methodThatCallsAnotherFailingMethod(); 
    }; 

    expect(call).to.throw(Error); 

});

Bei der Prüfung (oder Ausspionieren) andere Sachen in methodThatCallsAnotherFailingMethod Sie dies in Ihrem Test tun können:

try { 
    call(); 
    } catch (error) { 
    expect(MySpy).to.have.been.calledWith(error); 
    }