使用karma和mocha进行测试时找不到Angular的$ interval服务

时间:2015-08-04 17:32:35

标签: angularjs karma-mocha

我创建了一个服务,它将$ interval作为依赖项并使用它并且似乎有效。不幸的是,当我尝试单元测试时,应用$ interval服务找不到angular:

Unknown provider: $$qProvider <- $$q <- $interval

我没有像往常一样在控制器内调用服务,而是在应用程序的run()方法中调用:

app.service('myService', ['$rootScope', '$window', '$interval', myService]);
app.run(function (myService) {
...
});

它有效,但如果我尝试测试应用程序崩溃。其余的角度服务似乎没有这个问题($ window,$ location,$ rootScope,...),如果我将我的服务附加到控制器而不是在app.run()上调用它,即使是同样的服务也可以工作:

app.controller('myController', ['myService', function(myService){ ... }]);

我使用Karma + Mocha + Sinon + Chai来测试。

更新 迷你应用尝试在app.run()使用$ interval的示例:

var anApp = angular.module('myTestApp', ['ngRoute']);
anApp.run(function($rootScope, $timeout, $window, $location, $interval) {
    // blah
});

测试:

describe("Lalarala", function() {
    var scope = null;

    beforeEach(function() {
        module("myTestApp");
        inject(function ($rootScope) {
            scope = $rootScope.$new();
        });
    });

    it("doesnt crash", function () {
        //blah
    });
});

注意:如果从app.run()中移除$ interval,则可以正常工作。相反,其他角度服务,如$ timeout,$ window或$ location似乎并没有打扰。

另外,我注意到像$ resource这样的其他服务也存在这个问题。

我认为其中一些服务在准备好之前还需要其他服务,这就是为什么我不能在app.run()上调用它们?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这一行肯定是错的。

  

app.controller(&#39; myController&#39;,[myService,function(myService){...}]);

数组注入语法应包含字符串

 app.controller('myController', ['myService', function(myService){ ... }]);

答案 1 :(得分:0)

确定,

在检查了很多东西后,我发现问题与角度模拟过时有关。

我更新了角度和角度模拟的版本,现在一切正常。

抱歉!