AngularJS Jasmine Test - 如何跳过请求

时间:2016-01-22 16:20:17

标签: javascript angularjs unit-testing jasmine httpbackend

我们有一组测试用例,这些测试用例对于许多不同的形式都很常见。 某些表单可能会触发一个延迟加载器,它会在指令的post部分中预取一些数据,因此会触发HTTP GET。

在之前的常见测试中,我必须处理它,否则我得到 意外请求:GET / bla / requests / generateJson / something不再需要预期

我添加了$ httpBackend.when(" GET",// generateJson /(.+)/).response();在范围之前。$ digest();在每次测试之前。现在,错误更改为

错误:未刷新的请求:1

添加 $ httpBackend.flush();

在触发GET调用时导致测试用例通过,但所有未触发GET的测试用例都失败并显示错误

错误:没有待处理的待处理请求!

我该怎么处理?我只是希望这个测试完全忽略GET,无论它是否存在。我可以以某种方式确定GET是否被解雇,并因此与flush进行反应?

1 个答案:

答案 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
    });

});

可以在$httpBackend docs页面上找到更多信息。另外,请查看关于GitHUb的this讨论。

相关问题