3 回答

TA貢獻1788條經驗 獲得超4個贊
當您的組件設置狀態的電子郵件屬性時。您可以檢查組件的狀態,例如:
expect(component.state().email).toEqual('abc@hello');

TA貢獻1824條經驗 獲得超8個贊
嘗試這個方法,
成分
import React, { Component } from "react";
export class YourComponent extends Component {
state = {email: ''};
handleInputChange = (event) => {
this.setState({ email: event.target.value });
};
render() {
return (
<input
id='email'
onBlur={this.handleInputChange}
name='email'
type='text'
value={this.state.email}
/>
);
}
}
export default YourComponent;
測試文件
describe("Blur test", () => {
it("input component", () => {
const component = mount(<YourComponent />);
let inputs = component.find('input');
const inputValue = 'abc@hello';
inputs.at(0).simulate('blur', { target: { value: inputValue } });
inputs = component.find('input');
console.log(inputs.debug());// you will get updated value here
expect(inputs.props().value).toEqual(inputValue);
});
});

TA貢獻1876條經驗 獲得超6個贊
您在測試中引用了props().value,而輸入元素沒有這樣的屬性。所以你需要value在輸入中添加 prop
<input
id='email'
onBlur={this.handleInputChange}
name='email'
type='text'
value={this.state.email}
/>
為了測試預期的 props 值,您需要強制重新渲染組件以反映新值。在 中Enzyme,我們可以通過使用 來做到這一點wrapper.setProps({})。您可以傳遞所需的值wrapper.setProps({value: 'abc@hello'})或只是一個空對象,此處的目的是導致重新渲染。
const inputs = component.find('input');
expect(inputs.length).toEqual(2); // test case passes
inputs.at(0).simulate('blur', { target: { value: 'abc@hello' } });
// setProps should be called on the shallow or root wrapper.
component.setProps({}); // cause rerender.
expect(inputs.at(0).props().value).toEqual('abc@hello'); // test should pass
添加回答
舉報