我们有一组测试用例,这些测试用例对于许多不同的形式都很常见。 某些表单可能会触发一个延迟加载器,它会在指令的post部分中预取一些数据,因此会触发HTTP GET。
在之前的常见测试中,我必须处理它,否则我得到 意外请求:GET / bla / requests / generateJson / something不再需要预期
我添加了$ httpBackend.when(" GET",// generateJson /(.+)/).response();在范围之前。$ digest();在每次测试之前。现在,错误更改为
错误:未刷新的请求:1
添加 $ httpBackend.flush();
在触发GET调用时导致测试用例通过,但所有未触发GET的测试用例都失败并显示错误
错误:没有待处理的待处理请求!
我该怎么处理?我只是希望这个测试完全忽略GET,无论它是否存在。我可以以某种方式确定GET是否被解雇,并因此与flush进行反应?
答案 0 :(得分:0)
您可以使用$httpBackend
方法验证是否未对verifyNoOutstandingRequest()
模拟进行调用。您还可以使用verifyNoOutstandingExpectation()
方法验证对后端的任何预期调用是否成功。所以你的代码看起来像这样:
describe('Test HTTP Service', function () {
var $httpBackend;
beforeEach(inject(function (_$httpBackend_) {
$httpBackend = _$httpBackend_;
$httpBackend.when('GET', '//generateJson/(.+)/').respond();
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('calls the backend', function () {
$httpBackend.GET('//generateJson/Petr/');
$httpBackend.flush();
});
it('does not call the backend', function () {
// Some action that does call $httpBackend
});
});