【发布时间】:2014-08-08 19:30:11
【问题描述】:
在我的测试中,我启动了一些模型数据并模拟了响应:
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 值。好像用的是原来的mock值:
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 的情况下这样做,两者都会因通常的“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变量。然后更改每个it语句中的fakeResponse值。
【问题讨论】:
-
我没有看到任何发出 http 请求的东西。您必须在发出请求之前设置
$httpBackend。
标签: javascript angularjs unit-testing jasmine