我有一个反应组件,可以在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字典/对象)。这使我们可以访问成功和错误回调,从而允许我们传递我们对这些函数的任意输入并对它们进行测试。希望这是有道理的? –