2015-11-27 35 views
3

我正在为某人的应用程序编写一些测试代码。我是专门为React编写测试的新手。反应测试假XMLHttpRequest

在该组件内的方法之一,一个新XMLHttpRequest对象被实例化,然后用于像这样:

var myModal = React.createClass({ 
    postRequest: function(data) { 
    var json = JSON.stringify(data) 
    var request = new XMLHttpRequest() 

    request.open('POST', '/my/endpoint', true) 
    request.setRequestHeader('Content-Type', 'application/json') 
    request.send(json) 
    } 

    //... 
} 

我使用Sinon,和它们的文件说,有可以使用的一个假的XMLHttpRequest用于测试AJAX请求。我想知道如何覆盖这个与Sinon一样的实例化对象,以便测试使用它来进行api调用。

如果我尝试和假分配给request变量:

before(function() { 
    request = sinon.useFakeXMLHttpRequest(); 
    requests = []; 
    request.onCreate = function (req) { requests.push(req); }; 
}); 

测试还是倒了,当它到达该组件的new XMLHttpRequest()线。我应该创建并导入一个存根对象吗? https://github.com/danvk/mocha-react/blob/jsx-stubs/BigComplicatedComponent.js或者我错误地试图覆盖它。

回答

1

终于得到了这个工作。将此添加到顶部。我想它应该与重写任何课程一起工作。

var FakeXMLHTTPRequests = require('fakexmlhttprequest') 
var requests = [] 

XMLHttpRequest = function() { 
    var r = new FakeXMLHTTPRequests(arguments) 
    requests.push(r) 
    return r 
} 

感谢这篇文章帮助我思考。 http://www.asbjornenge.com/wwc/testing_react_components.html

还可以这样如果使用XMLHttpRequest:correct usage of sinon's fake XMLHttpRequest