我有一个简单的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;
};
}
);
Run Code Online (Sandbox Code Playgroud)
我想为它写一个单元测试.我希望能够在测试中注入用户服务的模拟.
我可以为控制器单元测试执行此操作,如文档中所示:
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
});
}));
Run Code Online (Sandbox Code Playgroud)
但是在beforeEach中用$ filter替换$ …
使用Angular UI Select2指令,在输入字段上定义标记.如果输入本身在自定义指令中,则它未正确初始化并且控制台发出错误:
query function not defined for Select2 tagging
我怀疑这可能与指令编译/链接的顺序与调用select 2函数时的顺序有关.
也许有一个简单的解决方法,可能使用编译功能或指令控制器而不是链接功能?或者它可能是Angular UI select2指令的问题.
我做了一个显示问题的plunker:
所以我的问题是 - 如何从自定义Angular指令中获取select2标签?