1

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

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() 调用它们的原因?

谢谢你的帮助。

4

2 回答 2

1

这条线肯定是错误的。

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

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

 app.controller('myController', ['myService', function(myService){ ... }]);
于 2015-08-04T17:38:41.663 回答
0

行,

在检查了很多事情之后,我发现问题与 angular-mocks 过时有关。

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

对不起!

于 2015-08-05T16:44:00.410 回答