在单元测试中,当[method]语句在请求之间时如何改变$httpBackend
How to change $httpBackend when[method] statements between requests in unit testing?
在我的测试中,我启动了一些模型数据并模拟响应:
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,两者都会失败,并出现通常的"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
});
如何在请求之间调制模拟数据?
我也试过:
- 在
it
语句之间夹beforeEach
- 设置
.respond(
为fakeResponse
变量。然后在每个it
语句中修改fakeResponse
的值。
resetExpectations()
执行afterEach($httpBackend.resetExpectations);
文档重置所有请求期望,但保留所有后端定义。通常,当您希望重用相同的$httpBackend mock实例时,您将在多阶段测试中调用resetExpectations。
文档来源:https://docs.angularjs.org/api/ngMock/service/$httpBackend
相关文章:
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- 为什么使用immutableJS我的状态没有改变
- JavaScript改变了双方的显示风格
- 改变所有<td>为特定的桌子点击颜色
- 变量dos'即使我可以返回更新后的值,也不会改变
- jQuery更改变量值
- 爆米花改变来源
- innerHTML赢得't改变元素
- Javascript onclick更改变量值
- "改变“;列表头,然后继续处理列表
- 是否可以使用“;document.all”;在IE11中,而不改变每次使用
- 当偏移量改变时滚动顶部
- 如何用jquery动画改变背景颜色,就像一个过渡
- 用咕哝的任务改变恒定的角度内容
- 如何改变“;尺寸“;单击选择时的选择
- 在按钮改变高度后使标题保持不变
- 如何改变<仪表>价值观
- .show()不会改变效果或方向
- 角度路由:只是为了改变一些变量