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

Angular's $interval service not found when testing using karma and mocha

我创建了一个将 $interval 作为依赖项的服务并使用它并且似乎可以正常工作。不幸的是,当我尝试对应用程序进行单元测试时,angular:

找不到应用程序 $interval 服务
Unknown provider: $$qProvider <- $$q <- $interval

我不是像往常一样在控制器内调用服务,而是在应用程序的 运行() 方法上调用:

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

它有效,但如果我尝试测试应用程序崩溃。 angular 服务的其余部分似乎没有这个问题($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,它会起作用。相反,其他 angular 服务,如 $timeout、$window 或 $location 似乎没有问题。

此外,我注意到 $resource 等其他服务也有此问题。

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

调用它们

感谢您的帮助。

这一行肯定是错的。

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

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

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

好的,

检查了很多东西后,我发现问题与 angular-mocks 过时有关。

我更新了 angular 和 angular-mocks 的版本,现在一切正常。

对不起!