我试图在我的代码段中调用fail
条件。
但是当我使用sinon.stub().throws()
方法时它会显示错误。
我无法在代码中处理它。
这是我的代码:
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);
});
}
**这是我的单元测试片段:**
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]);
}));
请让我知道出错了什么
答案 0 :(得分:0)
这个问题在这个答案中已经有一个月了,但是我遇到了类似的错误,Google也没有对此行为做出任何解释。我也想测试登录的失败分支,stub.throws()
实际上抛出错误(导致测试失败),而不是拒绝登录承诺。如果有人知道为什么会这样,我会很感激。
无论如何,这对我有用:
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
答案 1 :(得分:0)
您需要包装您知道将要失败的函数,然后call
它。 e.g。
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);
});
在methodThatCallsAnotherFailingMethod
中测试(或监视)其他内容时,您可以在测试中执行此操作:
try {
call();
} catch (error) {
expect(MySpy).to.have.been.calledWith(error);
}