1

アプリ構成で呼び出されるサービスがあります$language(したがって、すべての仕様が実行される前に)。と呼ばれるメソッド$language.update()がトリガーします$translate.use()(これが をトリガーします$http.get())。これにより、Unexpected request: GET /<lang>/i18n.

これを解決するためにいくつかの異なることを試しましたが、それぞれが新しい問題を引き起こしているようです:

$translateサービスをグローバルにモックする

// not inside a describe()
beforeEach(function() {
    module(function($provide) {
        $provide.value('$translate', {
            get:         function() { return false; },
            storage:     function() { return false; },
            storageKey:  function() {
                return {
                    get: function() { return false; },
                    set: function() { return false; }
                };
            },
            use:         function() { return false; }
        });
    });
});

しかし、何かが を呼び出そうとする$translate()ので、モックをオブジェクトを返す関数にしてみましたが、それもうまくいきませんでした。

$httpBackend 経由で GET リクエストをモックする

// not inside a describe()
beforeEach(function() {
     // this already existed to avoid another problem caused by $translate
    module('MyApp', function config($translateProvider, $anotherProvider) {
        // …
    });

    // new
    inject(function($httpBackend) {
        $httpBackend.when('GET', '/<lang>/i18n').respond({});
    });
});

しかし、それは不平を言います(モジュール注入Injector already created, can not register a module!の順序は問題ではないようです)。

$language サービスをグローバルにモックすることを考えましたが、独自の仕様でテストすることはできません。

理想的には、 $translate をグローバルにモックすることをお勧めします。これは、問題が次々と発生するように思われるためです。

4

1 に答える 1