我在module.run
:
angular.module('demo').run(function($http) {
$http.get('/some/thing');
$http.get('/some/other/thing');
});
当我在测试中使用$rootScope.$apply
来解决模拟承诺时,unexpected request errors
和'/some/thing'
获得'/some/other/thing'
。
解决此问题的一种方法是在之前设置$httpBackend
:
$httpBackend.when('GET', mockData.API_URL + '/some/thing').respond(200, {});
$httpBackend.when('GET', mockData.API_URL + '/some/other/thing').respond(200, {});
这会有效,但这意味着我必须将它放在我使用$rootScope.$apply
的每个测试文件的前面。
如何为每个测试文件制作全局$httpBackend
个配置?
或者是否有更好的解决方案来解决这个问题?
答案 0 :(得分:2)
来自Mocha website," Root-Level Hooks":
您也可以选择任何文件并添加" root" -level钩子。例如, 在所有describe()块之外添加beforeEach()。这将导致 回调到beforeEach()在任何测试用例之前运行,无论如何 它所居住的文件(这是因为Mocha有一个隐藏的describe() 块,称为"根套件")。
beforeEach(function() {
console.log('before every test in every file');
});
答案 1 :(得分:1)
如果您真的需要所有测试,VinceOPS答案是最好的。如果你不想在每个测试中需要它,我会做什么,但只是很多将$ httpBackend调用移动到一个单独的函数中并将其放在一个共享的js文件中。然后你需要在beforeEach之前调用该函数。
对于更复杂的配置,我经常为describe()
,it()
或您定义测试的函数创建自己的包装函数,以防止写入(过多)重复代码。