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

时间:2013-07-17 10:47:05

标签: angularjs jasmine

我想为该指令编写测试。

在应用

requiresDependencies = ["someModule1","someModule2"];
var app = angular.module('app', requiresDependencies);

在测试中

describe("Logon Hours Editor", function ()
{
    var compile, rootScope;
    var element;

    beforeEach(module('app'));

    beforeEach(inject(['$compile', '$rootScope', function ($compile, $rootScope)
    {
        compile = $compile;
        rootScope = $rootScope;
        element = $compile('some html')($rootScope);
    } ]
    )); ....

我的指令是相对于主单元的,我不想连接“requiresDependencies”中描述的其他测试模块(someModule1,someModule2),因为以后可以更改它们的数字和名称。 如何在没有依赖项的情况下进行连接?

1 个答案:

答案 0 :(得分:0)

你必须嘲笑他们。例如,您可以使用带有要模拟的服务或指令的d创建名为mocks的模块。然后使用beforeEach(module('mocks'));加载它,并且从测试套件到mocks中的任何服务的调用将使用虚拟实现。

你可以把这个模拟模块放在你的测试文件夹中,比如/test/lib/my-mocks.js(如果你使用的是angular-seed,则会在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',
   ...
];

另一种方法是使用茉莉花间谍。例如:

 spyOn($location, 'absUrl').andCallFake(function (p) {
     return 'http://localhost/app/index.html#/this/is/my/route';
 });