Tôi có một hình thức với 3 nút radio thích sau (tên giả):thử nghiệm một hình thức với jest và Phản ứng TestUtils JS
<form className="myForm" onSubmit={this.done}>
<input className="myRadio" checked={ŧrue} type="radio" name="myRadio" onChange={this.change} value="value1"
<input className="myRadio" type="radio" name="myRadio" onChange={this.change} value="value2"
<input className="myRadio" type="radio" name="myRadio" onChange={this.change} value="value3"
<input type="submit" className="submit" />
</form>
Và Tôi gặp thời gian rất khó khăn cố gắng để kiểm tra onChange và các sự kiện onSubmit .
inputs = TestUtils.scryRenderedDOMComponentsWithClass(MyComponentRendered, 'myRadio');
myForm = TestUtils.findRenderedDOMComponentWithClass(MyComponentRendered, 'myForm');
Tôi có một bài kiểm tra như:
it("changes the checked state when clicked", function() {
MyComponent.change = jest.genMockFunction();
expect(inputs[0].getDOMNode().checked).toBe(true);
TestUtils.Simulate.change(inputs[1], {target: {value: 'value2'}});
expect(inputs[0].getDOMNode().checked).toBe(false);
expect(inputs[1].getDOMNode().checked).toBe(true);
expect(inputs[2].getDOMNode().checked).toBe(false);
expect(MyComponent.change).toBeCalled(); //Fails
expect(MyComponent.change.mock.calls.length).toBe(1); //Fails too
});
đó làm việc ngoại trừ chức năng (MyComponent.change) mà nên được gọi nhưng nó không phải là.
Tôi cũng có một thử nghiệm cho onSubmit:
it("saves on submit", function()
MyComponent.done = jest.genMockFunction();
MyComponent.insideDone = jest.genMockFunction();
TestUtils.Simulate.submit(myForm);
expect(MyComponent.done).toBeCalled(); //Fails
expect(MyComponent.insideDone).toBeCalled(); //Success
});
Chú ý: MyComponent.insideDone là một chức năng được gọi bằng chức năng 'làm'.
Điều gì cũng không thành công. Tôi khá chắc chắn rằng vấn đề ở đây là tôi không mô phỏng các sự kiện một cách chính xác. Tuy nhiên, tôi không tìm thấy ví dụ về điều này bằng cách sử dụng Jest và TestUtils từ React.
Tôi đã thử gửi biểu mẫu bằng sự kiện nhấp nhưng không kết thúc ở đâu, nhưng những gì đã giúp giữ chính yếu tố biểu mẫu và gọi TestUtils.Simulate.submit (mẫu) – nimgrg
Đối với chức năng thay đổi, tôi có thể sẽ kiểm tra MyComponent. change.mock.calls.length bằng 1, để kiểm tra xem hàm giả đã được gọi hay chưa. – nimgrg
@nimgrg, mock.calls.length cũng không thành công. Tôi đã cập nhật câu trả lời của mình. Hình như ví dụ cuối cùng, hàm "done" gọi một hàm khác ... và hàm đó được báo cáo là được gọi. –