2015-11-27 34 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