1、查找思路
(1)去掉Form.create(),一切正常;
(2)打印instance(),發(fā)現(xiàn)其中的變量和函數(shù)都屬于form。
2、解決方式
(1)嘗試mount WrappedComponent,報(bào)this.props.form undefined;
(2)嘗試傳入form,至此問題解決。
3、demo
/**
* 代碼只給出了該問題的解決方式,其他相關(guān)配置并未給出。
*/
// LoginPage.js
import {Button, Form} from "antd"
class LoginPage extends React.Component {
constructor(props) {
super(props);
this.state = {
btnName: "unclick"
};
}
test = () => {
console.log('test')
this.setState({
btnName: "clicked"
})
}
render() {
const {btnName} = this.state;
const { getFieldDecorator, validateFields } = this.props.form;
return (
<div>
<Button onClick={() => this.test()}>{btnName}</Button>
</div>
);
}
}
LoginPage = Form.create({})(LoginPage);
export default LoginPage;
// login.test.js
import LoginPage from "./LoginPage";
import { Input, Button } from "antd";
const { shallow, mount, render } = Enzyme;
describe("loginCheck", function() {
it("檢查點(diǎn)擊按鈕是否觸發(fā)test函數(shù)", () => {
let wrapper = shallow(<LoginPage />);
let form = wrapper.instance();
let LoginPageComponent = mount(<LoginPage.WrappedComponent form={form}/>)
LoginPageComponent.instance().test = jest.fn();
LoginPageComponent.instance().forceUpdate();
LoginPageComponent.update();
LoginPageComponent.find(Button).simulate('click');
expect(LoginPageComponent.instance().test).toBeCalled();
LoginPageComponent.instance().test.mockClear();
});
});