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 などの他のAngular サービスは問題にならないようです。

また、$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

Ok、

多くのことを確認した後、問題は古い角度のモックに関係していることがわかりました。

angular および angular-mocks のバージョンを更新したところ、すべて正常に動作するようになりました。

ごめん!

于 2015-08-05T16:44:00.410 に答える