我有一個反應組件,可以在componentDidMount
方法中進行AJAX調用。當我嘗試使用React.addons.TestUtils
來渲染它時,組件在沒有進行AJAX調用的情況下被渲染。我如何使用jest測試反應組件,以便它可以使AJAX調用?我是否需要使用phantomJS(或env等瀏覽器)以提供DOM功能來響應組件?單元測試反應組件,使用JEST進行ajax調用
陣營組件:
return React.createClass({
componentDidMount : function() {
$.ajax({
... makes http request
})
}
render : function() {
<div>
//view logic based on ajax response...
</div>
}
});
測試用例:
jest.dontMock(../MyComponent);
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var MyComponent = require(../MyComponent);
describe('Sample Test', function(){
it('To Render the component', function() {
var component = <MyComponent />;
var DOM = TestUtils.renderIntoDocument(component);
.... // Some other code...
});
})
你能否擴展你的答案以更好地描述jest會如何嘲笑$ .ajax? –
爲jest設置的默認設置自動模擬除了您專門設置爲不模擬的事物之外的所有內容。假設你使用'success'和'error'回調調用$ .ajax。 $ .ajax.calls是提供給$ .ajax函數調用的數組的調用。我們通過索引[0]得到第一個調用,然後第一個參數與另一個[0]($ .ajax通常只有一個參數,一個javascript字典/對象)。這使我們可以訪問成功和錯誤回調,從而允許我們傳遞我們對這些函數的任意輸入並對它們進行測試。希望這是有道理的? –