【问题标题】:completes get not called when async is false using jquery and sinon's fakeXMLHttpRequest使用 jquery 和 sinon 的 fakeXMLHttpRequest 当 async 为 false 时不调用完成
【发布时间】:2013-07-02 13:24:56
【问题描述】:

我正在使用 js-test-driver,在里面我使用 jasmine 进行测试,使用 sinon 进行间谍、fakeXMLHttpRequests 等等..

假设我们加载了以下文件:

load:
  - lib/jasmine.js
  - lib/JasmineAdapter.js
  - lib/sinon.js
  - lib/jquery-1.8.3.min.js
  - spec/*.js

spec 文件夹中有一个文件 test.js,内容如下:

describe('test', function() {

    it('should use sinon fakeXMLHttpRequest', function() {
        var result = [],
            requests = [];
        this.callback = function(xhr, textStatus) {
            result = textStatus;
        }
        var callbackSpy = sinon.spy(this, 'callback');
        var xhr = sinon.useFakeXMLHttpRequest();
        var clock = sinon.useFakeTimers();
        xhr.onCreate = function(xhr) {
            requests.push(xhr);
        }
        expect(requests.length).toBe(0);
        expect(callbackSpy.called).toBeFalsy();
        jQuery.ajax({
            async: false,
            url: 'somevalidurl.php',
            complete: this.callback
        });
        expect(requests.length).toBe(1);
        requests[0].respond(200, { "Content-Type": "application/json" },
            '[{ "id": 12, "text": "Something" }]');
        clock.tick(2000);
        expect(callbackSpy.called).toBeTruthy();
        expect(result).toBe('success')
        xhr.restore();
    });

});

然后我们得到以下错误:

Error: Expected false to be truthy.
Error: Expected [  ] to be 'success'.

如果我们更改为“async: true”,一切正常。这是一个错误还是我遗漏了一些行为?

【问题讨论】:

    标签: jquery ajax jasmine sinon js-test-driver


    【解决方案1】:

    对不起,我的错。对于那些有同样问题的人:

    当然不行。导致同步 XMLHttpRequest 停止执行。在这种情况下,Sinon 的 fakeXMLHttpRequest 正在做一些奇怪的事情。所以我重构了我的测试代码以使用异步 http 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2018-05-27
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多