在我的测试中,我发起一些模型数据并模拟响应:
beforeEach(function(){
var re = new RegExp(/^http\:\/\/.+?\/users-online\/(.+)$/);
$httpBackend.whenGET(re).respond({id:12345, usersOnline:5000});
});
it('should find 5000 users in channel 12345', function(){
expect( UsersOnlineService.data.usersOnline).toEqual( 50000);
});
然后在下一个测试语句中说我想要更新频道的值。每个人都离开了,假设这会触发其他行为,所以我需要模拟第二个请求,以便我可以测试那个行为。
将$httpBackend.whenGET
添加到下一个it
语句不会覆盖beforeEach
值。它似乎使用原始的模拟值:
it('should find 0 users in channel 12345', function(){
$httpBackend.whenGET(re).respond({id:12345, usersOnline:0});
expect( UsersOnlineService.data.usersOnline).toEqual( 50000); //fails
});
如果我在没有beforeEach的情况下这样做,那么两者都会失败,通常会出现#34; unexpectedGet"错误。
it('should find 5000 users in channel 12345', function(){
var re = new RegExp(/^http\:\/\/.+?\/users-online\/(.+)$/);
$httpBackend.whenGET(re).respond({id:12345, usersOnline:5000});
expect( UsersOnlineService.data.usersOnline).toEqual( 50000); //fails
});
it('should find 0 users in channel 12345', function(){
var re = new RegExp(/^http\:\/\/.+?\/users-online\/(.+)$/);
$httpBackend.whenGET(re).respond({id:12345, usersOnline:0});
expect( UsersOnlineService.data.usersOnline).toEqual( 0); //fails
});
如何在请求之间调整模拟数据?
我也尝试过:
beforeEach
语句之间夹入it
.respond(
设置为fakeResponse
变量。然后更改每个fakeResponse
语句中的it
值。 答案 0 :(得分:2)
执行
afterEach($httpBackend.resetExpectations);
文档
重置所有请求预期,但保留所有后端定义。通常,当您想要重用$ httpBackend mock的相同实例时,可以在多阶段测试期间调用resetExpectations。
文档来源:https://docs.angularjs.org/api/ngMock/service/ $ httpBackend