私は単純な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で$controllerを$filterに置き換えても機能しません。これは、フィルターが角度によって異なる方法で構築されていると想定しているためです(つまり、コンストラクターの2番目のパラメーターとしてローカルを挿入することはできません)。
誰かがこれに出くわした/これを以前に解決したことがありますか?