我正在使用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;
};
}
}]);