アプリ構成で呼び出されるサービスがあります$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 をグローバルにモックすることをお勧めします。これは、問題が次々と発生するように思われるためです。