Javascript 理解测试中的过滤器注入

Javascript 理解测试中的过滤器注入,javascript,angularjs,testing,filter,Javascript,Angularjs,Testing,Filter,我开始在youtube上看angularJS。在名为“测试概述”的视频中,John Lindquist创建了一个如下的应用程序: var myApp = angular.module("myApp", []); myApp.filter('reverse', function(){ return function(text) { return text.split("").reverse().join(""); } }) function firstCt

我开始在youtube上看angularJS。在名为“测试概述”的视频中,John Lindquist创建了一个如下的应用程序:

var myApp = angular.module("myApp", []);
myApp.filter('reverse', function(){
    return function(text)
    {
         return text.split("").reverse().join("");
    }
})
function firstCtrl($scope, Data){
    $scope.data = Data;
}
然后他用Karma和Jasmine创建了一个单元测试,如下所示:

describe('filter', function()
{
    beforeEach(module('myApp'));
    describe('reverse', function()
    {
        it('should reverse a string', inject(function(reverseFilter) {
            expect(reverseFilter('ABCD')).toEqual('DCBA');
        }))
    })
})
测试通过了,代码还可以,但是我不知道为什么

我制作了我自己的副本,以便了解maggic发生在哪里。。。在听过AngularJS的参数命名之后,我将
inject(function(reverseFilter)
更改为
inject(function(anytext)
,它果然停止了工作

然后我注意到,如果我像这样重命名我的过滤器
myApp.filter('foe',function()
,那么注入调用必须通过
inject(function(foeFilter)
完成

这是从哪里来的?AngularJs的注入系统似乎使用了一些camelcase将“Filter”连接到过滤器的名称上,但我在任何地方都找不到关于这个过程的任何文档。我还发现使用
injection(function(foe))的“趣味性”
不起作用,而在AngularJS中,将参数名称与相对依赖项相匹配似乎是获取依赖项的最简单方法。AngularJS是否对其他类型的依赖项执行此操作

任何帮助都将不胜感激

您可以在angularJs官方教程中看到一个以这种方式测试过滤器的示例


非常感谢。

是的,with filters angular会将“Filter”连接到名称。他们也会对提供程序执行此操作。当您使用
$provide
模块创建提供程序时。provide
您可以通过在名称后面附加“provider”来访问配置块中的提供程序。我不确定原因,但这样可以访问提供程序n在html中使用过滤器时,确保注入配置块的内容确实已配置为提供程序(或常量)

angular可以确保查找名为“filterFilter”的筛选器。如果将名为filter的服务放在那里,它将不起作用,因此angular希望允许使用相同的定义名称创建筛选器和服务,同时使用稍微不同的名称保存它们。这有帮助吗