测试拒绝了Jasmine的承诺

时间:2015-01-13 13:06:49

标签: javascript angularjs jasmine promise

我正在构建AngularJS应用程序,我正在尝试对其进行单元测试。我想要测试的是被拒绝的场景。

这是我要测试的服务:

.factory('LoginService',['Login', 'consoleService', function(Login, consoleService){
return {
    getActiveUser: function() {
        return Login.query({}).$promise.then(
            function (users) {
                return users[0];
            },
            function (error) {
                consoleService.print(error);
            }
        );
    }
};

}]);

我正在尝试为被拒绝的场景编写单元测试(发生错误)。我想确保在出现错误时调用print函数。我尝试了不同的例子,但都没有人工作。有谁知道测试它的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

模拟拒绝服务已在以下链接

中讨论过

How to use mock $httpBackend to test error branch

答案 1 :(得分:0)

您可以模拟Login服务,然后根据变量调用pass或fail函数。

var failLogin;
beforeEach(module(function ($provide) {
    failLogin = false;        
    var mockLogin = {
        query: function(data) {
            return {
               $promise: {
                   then: function(pass, fail) {
                       if (failLogin) {
                           fail('failure data');
                       } else {
                           pass('pass data');
                       }
                   }
               }
            }
        } 
    } 

    $provide.value('login', mockLogin);
}

it('should pass', function(){
    LoginService.getActiveUser();
    // should pass
});


it('should fail', function(){
    failLogin = true;
    LoginService.getActiveUser();
    // should fail
});
相关问题