我有一个服务,$language
它在应用程序配置中被调用(所以在每个 Spec 运行之前)。调用的方法,$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 服务,但是我无法在它自己的 Spec 中对其进行测试。
理想情况下,我更喜欢全局模拟 $translate ,因为它似乎会导致一个又一个问题。