【问题标题】:AngularJS Jasmine Test - how to skip over a requestAngularJS Jasmine 测试 - 如何跳过请求
【发布时间】:2016-01-22 16:20:16
【问题描述】:

我们有一组测试用例,适用于许多不同的形式。 某些表单可能会触发延迟加载程序,该加载程序会在指令的 post 部分中预取一些数据,因此会触发 HTTP GET。

在普通测试的 beforeEach 中,我必须处理它,否则我会得到 意外请求:GET /bla/requests/generateJson/something 预计没有更多请求

我添加了 $httpBackend.when("GET",//generateJson/(.+)/).respond();在 scope.$digest() 之前;在测试的 beforeEach 中。现在,错误变为

错误:未刷新的请求:1

添加 $httpBackend.flush();

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

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

我该如何处理?我只是希望这个测试完全忽略 GET,无论它是否存在。我能否以某种方式确定 GET 是否被触发,然后对 flush 做出反应?

【问题讨论】:

    标签: javascript angularjs unit-testing jasmine httpbackend


    【解决方案1】:

    您可以使用verifyNoOutstandingRequest() 方法验证没有调用$httpBackend 模拟。您还可以使用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
        });
    
    });
    

    更多信息可以在$httpBackenddocs页面上找到。另外,请查看 GitHub 上的 this 讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2016-10-05
      相关资源
      最近更新 更多