我正在使用Mocha/Chai/Sinon測試React組件,並使用諸如renderedComponent.getTodos(callback)
之類的內容在不同的文件中調用AJAX請求。我正在傳遞一個類似於這個Sinon FakeServer tutorial的回調。但是,我收到一個奇怪的語法錯誤,導致回調不被調用,因此server.requests
爲空。Sinon Fakeserver測試不同的組件/文件 - 沒有請求?
我知道我問了一個類似的問題here - 但是,這個問題在這裏有所不同,我在不同的文件中調用AJAX請求,而不是在同一個文件中,現在解決方案在以前工作已不再工作。我不知道爲什麼。一般來說,我的問題是:是否有什麼關於在不同的文件中包含一個函數,導致Sinon無法加載到我的JSDOM實例中?
供參考,這是我的renderedComponent初始化和FakeServer碼,坐在我的測試文件:
test.js
renderedComponent = ReactTestUtils.renderIntoDocument(
<Component...>
<p>Drag & drop files here or click here to browse for files.</p>
</Component>
...
describe('Testing', function(){
var server;
before(function() { server = sinon.fakeServer.create(); });
after(function() { server.restore(); });
it("calls callback with deserialized data", function() {
var callback = sinon.spy();
renderedComponent.getTodos(callback);
// This is part of the FakeXMLHttpRequest API
server.requests[0].respond(
200,
{ "Content-Type": "application/json" },
JSON.stringify([{ id: 1, text: "Provide examples", done: true }])
);
assert(callback.calledOnce);
});
,這裏是在renderedComponent
的serverRequest
功能,這是在我試圖測試的另一個文件中的React組件:
Component.js
var Component = React.createClass({
...
function getTodoscallback) {
$.ajax({
url: "/todo/items",
success: function (data) {
// Node-style CPS: callback(err, data)
callback(null, data);
}
});
}
}
添加一個error
參數AJAX請求從jsdom節點模塊揭示了語法錯誤試圖做urlObj = new URL(uri, documentBaseURLSerialized(this._ownerDocument));
我的直覺是,這與JSDom裝載jQuery和興農做的,但超越我不知道 - 我會很感激任何幫助。
目前尚不清楚在什麼文件中。事實上,你應該編輯你的問題,使其成爲[mcve],以便人們可以重現你得到的錯誤。所有各個部分如何相互關聯的細節非常重要。 – Louis
@Louis我試圖弄清楚什麼是文件。請讓我知道是否還有其他事情可以做。 – frogbandit