节点上的Mocha中的XMLHttprequest
我正在尝试使用node-xmlhttprequest 。 所以如果我这样做
// f.js (function() XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest xhr = new XMLHttpRequest() xhr.open('GET', "http://url-bla-bla.json", true) xhr.onreadystatechange = function(){ console.log("xhr "+JSON.stringify(xhr)) } xhr.send() )()
并将其称为node f
(假设Access-Control-Allow-Origin
不是http://url-bla-bla.json
链接的问题 – 它起作用
但如果我尝试它包装同样的东西到摩卡规格
describe('foo',function(){ it('xhr test',function(){ XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest xhr = new XMLHttpRequest() xhr.open('GET', "http://url-bla-bla.json", true) xhr.onreadystatechange = function(){ console.log("xhr "+JSON.stringify(xhr)) } xhr.send() } }
并与mocha f
运行(我甚至不必包装在摩卡规格)
它将无法正常工作并且失败,并且readyState == 1
这是一个asynchronous操作。 在Mocha中,您必须使用done
callback来完成操作完成后的testing,如下所示:
describe('foo',function(){ it('xhr test',function(done){ XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest xhr = new XMLHttpRequest() xhr.open('GET', "http://url-bla-bla.json", true) xhr.onreadystatechange = function(){ console.log("xhr "+JSON.stringify(xhr)) if (xhr.readyState === 4) done(); } xhr.send() }); });
除了修正语法错误之外,唯一的其他变化是将done
参数添加到调用的callbackonreadystatechanges
并在onreadystatechanges
执行时调用done()
, readyState
已达到4
。