1

我有一些在加载时需要数据的服务。

所以我的测试失败了,因为我需要在$httpBackend.

这会在我的测试中导致大量重复代码。

我尝试减少重复代码的一部分,我决定添加$rootScope.test标志,如果这些服务上有这个标志,则不加载数据,但我仍然需要$rootScope.test=true在整个测试中重复。

有没有办法在角度测试中正确地做到这一点?

这是一些代码

   $httpBackend.expectGET('/backend/system/translations/en.json').respond({'angularjs': 'cool'});
   $httpBackend.expectGET('/backend/system/translations/he.json').respond({'angularjs': 'cool'});
   $httpBackend.expectGET('/backend/system/translations/ru.json').respond({'angularjs': 'cool'});
   $httpBackend.expectGET('/backend/system/translations/ar.json').respond({'angularjs': 'cool'});
   $httpBackend.expectGET('/translations/general.json').respond({'angularjs': 'cool'});
    i18n = $filter('i18n');

我拥有的每条带有翻译支持的指令都需要每种语言的这些语句。

4

1 回答 1

1

要使用一个语句以相同的方式处理每个 url,请尝试这样的操作:

$httpBackend.expectGET(function(url){
  return true;
}).respond({'angularjs': 'cool'});

文档中,expectGET 的第一个参数是:

HTTP url 或接收 url 并在 url 与当前定义匹配时返回 true 的函数。

如果您想仅定义对翻译 url 的响应,请尝试以下操作:

$httpBackend.expectGET(function(url){
   return url.lastIndexOf("/backend/system/translations/", 0) === 0;
}).respond({'angularjs': 'cool'});

另外,你确定你需要使用expectGET()而不是whenGET()?如果您不关心给定的 url 是否被调用,多少次以及以何种顺序,并且您只想定义响应,那么 when... 方法是要走的路:

请参阅:上述文档页面的“请求期望与后端定义”部分。

后端定义允许您为您的应用程序定义一个假后端,它不会断言是否发出了特定请求,如果发出请求,它只会返回经过训练的响应。无论在测试期间是否发出请求,测试都将通过。

于 2014-09-13T08:05:43.667 回答