我有一个简单的 angularjs 过滤器(它需要一个 id 并将其转换为一个名称字符串),这取决于一个自定义服务来完成它的工作:
angular.module('app').filter('idToName',
function(User) {
return function(id) {
var result, user;
result = '';
if (id) {
result = 'no name found';
user = User.getById(id);
if (user) {
result = user.firstName;
}
}
return result;
};
}
);
我想为它写一个单元测试。我希望能够将用户服务的模拟注入到测试中。
我可以为控制器单元测试执行此操作,如文档中所示:
var mockUserService;
mockUserService = {
getById: function(id) {
return {
firstName: 'Bob'
};
}
};
beforeEach(inject(function($rootScope, $controller) {
var ctrl, scope, userService;
userService = mockUserService;
scope = $rootScope.$new();
return ctrl = $controller('someController', {
$scope: scope,
User: userService
});
}));
但是在 beforeEach 中用 $filter 替换 $controller 不起作用,因为我认为过滤器的构造方式不同(即不允许您将本地变量作为构造函数的第二个参数注入。)
有没有人遇到过这个/解决过这个?