我正在测试名为handleSubmit
的组件方法(名称无关紧要......)。
// ...imported all modules at the top, including enzyme
it('should submit form data', () => {
let form = shallow(<Form />);
let handleSubmit = jest.fn(); // <= this doesn't work!!
form.find('.submit-btn').simulate('click');
expect(form.find('.submit-btn').length).toEqual(1);
expect(handleSubmit).toHaveBeenCalled();
});
import React, { Component } from 'react';
import axios from 'axios';
class CarnetSidebarForm extends Component {
constructor(props) {
super(props);
this.state = {
title: ''
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
const target = e.target;
const value = target.value;
const name = target.name;
this.setState({
[name]: value
});
}
handleSubmit(e) {
e.preventDefault();
let payload = {
title: this.state.title
};
this.postCard(payload);
console.log('Payload: ', payload);
}
postCard(data) {
return axios.post('http://localhost:4000/api/cards', data)
.then(response => {
console.log('Response: ', response.message);
});
}
render() {
return (
<div className="card-form-panel">
<form className="card-form" onSubmit={this.handleSubmit}>
<div className="form-group">
<label htmlFor="card-title-field">Title</label>
<input className="form-control"
type="text"
placeholder="Title..."
id="card-title-field"
name="title"
value={this.state.title}
onChange={this.handleChange} />
</div>
<input className="card-submit-btn btn btn-primary" type="submit" value="Save" />
</form>
</div>
);
}
}
export default CarnetSidebarForm;
我一直收到此错误消息,现在很烦人:
expect(jest.fn()).toHaveBeenCalled()
Expected mock function to have been called.
但如果我在测试中创建一个假组件,那么它可以正常工作
it('should submit form data', () => {
let handleSubmit = jest.fn();
// create a fake component
let form = mount(
<form onSubmit={handleSubmit}>
<input className="submit-btn" type="submit" value="Save" />
</form>
);
form.find('.submit-btn').simulate('submit');
expect(form.find('.submit-btn').length).toEqual(1);
expect(handleSubmit).toHaveBeenCalled();
});
是否与导入组件的shallow()
中的mount
或enzyme
有关?我花了很多天寻找答案,但我迷路了。
答案 0 :(得分:0)
<input className="card-submit-btn btn btn-primary" type="submit" value="Save" />
您的组件未使用className .submit-btn
,而是使用.card-submit-btn
。