首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jquery和sinon的fakeXMLHttpRequest在异步为假时完成get not called

使用jquery和sinon的fakeXMLHttpRequest在异步为假时完成get not called
EN

Stack Overflow用户
提问于 2013-07-04 21:47:25
回答 1查看 493关注 0票数 1

我使用js-test-driver,在内部我使用jasmine进行测试,使用sinon进行间谍、fakeXMLHttpRequests等。

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

代码语言:javascript
复制
load:
  - lib/jasmine.js
  - lib/JasmineAdapter.js
  - lib/sinon.js
  - lib/jquery-1.8.3.min.js
  - spec/*.js

在等级库文件夹内是一个包含以下内容的文件test.js:

代码语言:javascript
复制
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();
    });

});

然后,我们得到以下错误:

代码语言:javascript
复制
Error: Expected false to be truthy.
Error: Expected [  ] to be 'success'.

如果我们更改为"async: true“,一切都会正常工作。这是一个bug,还是我遗漏了什么行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-04 23:23:12

抱歉,是我的错。对于那些有同样问题的人:

当然,它不起作用。因为同步的XMLHttpRequest会停止执行。Sinon的fakeXMLHttpRequest在这种情况下做了一些奇怪的事情。因此,我重构了我的测试代码,以使用异步http请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17471978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档