我有一些服务在加载时调用数据。
所以我的测试失败了,因为我需要在$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');
我拥有的每个指令都有一些翻译支持,每种语言都需要这些语句。
答案 0 :(得分:1)
只用一个语句以相同的方式处理每个URL,请尝试这样:
$httpBackend.expectGET(function(url){
return true;
}).respond({'angularjs': 'cool'});
来自documentation expectGET的第一个参数是:
HTTP url或接收url的函数,如果是url则返回true 匹配当前的定义。
如果您想定义对翻译网址的回复,请尝试这样:
$httpBackend.expectGET(function(url){
return url.lastIndexOf("/backend/system/translations/", 0) === 0;
}).respond({'angularjs': 'cool'});
此外,您确定需要使用expectGET()
代替whenGET()
吗?如果你不关心给定的网址是否被调用,多少次以及以何种顺序而你只是想要定义响应,那么当...方法是要走的时候:
请参阅:"请求期望与后端定义"上述文档页面的一部分。
后端定义允许您为您的后端定义假后端 如果发出特定请求,则不会断言的应用程序 不是,如果提出请求,它只返回训练有素的响应。考试 无论是否在测试期间提出请求,都会通过。