我使用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在等级库文件夹内是一个包含以下内容的文件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“,一切都会正常工作。这是一个bug,还是我遗漏了什么行为?
发布于 2013-07-04 23:23:12
抱歉,是我的错。对于那些有同样问题的人:
当然,它不起作用。因为同步的XMLHttpRequest会停止执行。Sinon的fakeXMLHttpRequest在这种情况下做了一些奇怪的事情。因此,我重构了我的测试代码,以使用异步http请求。
https://stackoverflow.com/questions/17471978
复制相似问题