Tôi đã phản ứng thành phần gọi AJAX theo phương thức componentDidMount
. Trong khi tôi cố gắng hiển thị nó bằng cách sử dụng React.addons.TestUtils
, thành phần được hiển thị mà không cần thực hiện cuộc gọi AJAX. Làm thế nào tôi sẽ thử nghiệm thành phần phản ứng bằng cách sử dụng jest để nó làm cho cuộc gọi AJAX? Tôi có cần sử dụng phantomJS (hoặc trình duyệt như env) để cung cấp khả năng DOM để phản ứng lại thành phần không?Thử nghiệm đơn vị phản ứng thành phần tạo ra các cuộc gọi ajax bằng cách sử dụng JEST
Phản ứng Thành phần:
return React.createClass({
componentDidMount : function() {
$.ajax({
... makes http request
})
}
render : function() {
<div>
//view logic based on ajax response...
</div>
}
});
TestCase:
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...
});
})
Bạn có thể mở rộng câu trả lời của mình để mô tả tốt hơn cách jest sẽ giả lập $ .ajax không? –
Các thiết lập mặc định cho jest tự động mocks tất cả mọi thứ ngoại trừ những điều bạn đặc biệt thiết lập để không giả. Vì vậy, giả sử bạn gọi $ .ajax với lệnh gọi 'success' và' error'. $ .ajax.calls là một chuỗi các cuộc gọi được cung cấp cho hàm $ .ajax. Chúng tôi nhận được cuộc gọi đầu tiên bằng cách lập chỉ mục [0], và sau đó đối số đầu tiên với một [0] ($ .ajax thường chỉ có một đối số, một từ điển/đối tượng javascript).Điều này cho phép chúng ta truy cập vào các callback thành công và error, cho phép chúng ta truyền bất kỳ đầu vào tùy ý nào mà chúng ta mong đợi vào các hàm đó và kiểm tra chúng. Hy vọng rằng có ý nghĩa? –