模块AngularJS中没有不必要依赖项的单元测试指令

模块AngularJS中没有不必要依赖项的单元测试指令,angularjs,jasmine,Angularjs,Jasmine,我想为指令编写一个测试 应用程序内 requiresDependencies=[“someModule1”、“someModule2”]; var app=angular.module('app',requiresDependencies); 测试中 描述(“登录时间编辑器”,函数() { var编译,rootScope; var元素; 在每个(模块(“应用”)之前; beforeach(注入(['$compile','$rootScope',函数($compile,$rootScope) {

我想为指令编写一个测试

应用程序内

requiresDependencies=[“someModule1”、“someModule2”];
var app=angular.module('app',requiresDependencies);
测试中

描述(“登录时间编辑器”,函数()
{
var编译,rootScope;
var元素;
在每个(模块(“应用”)之前;
beforeach(注入(['$compile','$rootScope',函数($compile,$rootScope)
{
compile=$compile;
rootScope=$rootScope;
元素=$compile('somehtml')($rootScope);
} ]
)); ....
我的指令是相对于主单元的,我不想连接“requiresDependencies”中描述的其他测试模块(someModule1、someModule2),因为以后它们的编号和名称可以更改。
如何仅在没有依赖项的情况下进行连接?

您必须模拟这些依赖项。例如,您可以创建一个名为
mock
的模块,其中包含要模拟的服务或指令的d。然后在每个模块(模块('mock')之前使用
加载该模块
并且您从测试套件对
mock中的任何服务的调用将使用虚拟实现

您可以将此模拟模块放在您的测试文件夹中,如
/test/lib/my mocks.js
(如果您使用的是angular-mocks.js,则放在angular-mocks.js旁边)。最后,将其包含在
karma.conf.js
中:

files = [
  'app/lib/jquery/jquery-1.9.1.js',
  JASMINE,
  JASMINE_ADAPTER,
  'test/lib/jasmine-jquery.js',
  'app/lib/angular/angular.js',
  ...
  'test/lib/myproject/my-mocks.js',
   ...
];
另一种方法是使用jasmine间谍。例如:

spyOn($location,'absUrl')。和callfake(函数(p){
返回'http://localhost/app/index.html#/this/is/my/route';
});

在不创建其他文件的情况下创建这样的模拟有可能吗?我想你可以,只要你在karma可以看到的文件中声明它们(在karma.conf.js中列出)。在任何情况下,我都认为模拟模块应该放在一个单独的文件中,因为你不希望它们出现在你的应用程序中,目标是避免重复。模拟模块的声明与普通模块一样,但为了方便起见,你可以将它们命名为“myapp.mocks.mymodule”clarity@b1r3k也许这个答案会对你有所帮助