全局BeforeEach,用于用Mocha和Angular模拟HTTP请求

Global BeforeEach for mocking HTTP request with Mocha and Angular

本文关键字:Angular 模拟 HTTP 请求 Mocha BeforeEach 用于 全局      更新时间:2023-09-26

我有几个在module.run中触发的请求:

angular.module('demo').run(function($http) {
  $http.get('/some/thing');
  $http.get('/some/other/thing');
});

当我在测试中使用$rootScope.$apply来解决模拟承诺时,我得到'/some/thing''/some/other/thing'unexpected request errors

解决这个问题的一个方法是在beforeeach: 中设置$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配置全局每个测试文件?
或者是否有更好的解决方案?

来自Mocha网站,在"根级钩子":

你也可以选择任何文件并添加"根"级钩子。例如,在所有的describe()块之外添加beforeEach()。这将导致回调到beforeEach(),在任何测试用例之前运行它所在的文件(这是因为Mocha有一个隐藏的description ()块,称为"根套件")。

beforeEach(function() {   
    console.log('before every test in every file'); 
});

如果你真的需要它在所有测试VinceOPS答案是最好的。我会做什么,如果你不需要它在测试,但只是很多是移动$httpBackend调用到一个单独的函数,并把它放在一个共享的js文件。然后在需要的时候从beforeEach调用该函数。

对于更复杂的配置,我经常为describe(), it()或您定义测试的函数创建自己的包装器函数,以防止编写(太多)重复的代码。