如何对使用服务中的函数的角度过滤器进行单元测试?

时间:2017-03-27 12:36:03

标签: javascript angularjs unit-testing

我正在使用Jasmine对我的Angular项目进行单元测试。 我成功地测试了一个没有任何依赖关系的过滤器。 但是,我如何测试使用其他服务功能的过滤器/控制器/服务?

movieApp.filter('usernameFilter', ['registerService',function(registerService){
    return function(input){
        input = input || '';

        if(input.length <= 5){
            return 'This username is not long enough';
        }
        else if(registerService.uniqueUsername(input)){
            return 'This username is already being used';
        }

    };
}]);

我有以下过滤器,它使用registerService中的uniqueUsername函数。此函数基本上将用户的输入与本地存储中的现有用户名进行比较。

测试此过滤器的简单方法是什么?

describe('The username filter', function(){
    var $filter, registerService;

    beforeEach(function(){
        module('movieApp');

        inject(function(_$filter_, _registerService_){
            $filter = _$filter_;
            registerService = _registerService_;
        });
    });

    it('Should give an output when the username is already being used', function(){

        spyOn(registerService, 'uniqueUsername').and.callFake(function(){
            return true;
        });


        var input = 'username';

        result = $filter('usernameFilter')(input);

        expect(registerService.uniqueUsername).toHaveBeenCalled();
        expect(result).toBe('This username is already being used');
    });
});

我收到错误预期的spy uniqueEmail已被调用。             在对象。 (规格/ test.js:54:45)         预期未定义为&#39;此用户名已被使用&#39;。             在对象。 (规格/ test.js:55:24)

这是我的服务:

movieApp.service('registerService',['databaseService', function(databaseService){
    this.uniqueEmail = function(email){
        var exists = false;

        users = databaseService.get("users");

        if(users != null){

            users.forEach(function(e, i){
                if(e.mail == email){
                    exists = true;
                }
            })
            return exists;
        };
    }

}]);

0 个答案:

没有答案