我正在用笑话/酶测试React组件。我编写了test来测试输入标签上的onChange事件调用。我想窥探方法并检查它是否被解雇了 这是我的组件代码:
export default class Login extends Component {
constructor(props) {
super(props);
autoBind(this);
}
handleChangeFields() {
const email = this.email.value;
const password = this.password.value;
const validationResults = {
email: isValidEmail(email),
password: password.length >= 8,
};
const isValidFields = Object.values(validationResults).every(Boolean);
}
render() {
return (
<form onSubmit={this.validateLoginForm}>
<input
type="email"
name="email"
ref={(input) => this.email = input}
placeholder="Email *"
onChange={this.handleChangeFields}
/>
<input
type="password"
name="password"
ref={(input) => this.password = input}
placeholder="Password *"
onChange={this.handleChangeFields}
/>
<input
type="submit"
value="login"
/>
</form>
);
}
}
测试代码:
import React from 'react';
import { shallow, mount } from 'enzyme';
import Login from './Login';
describe('<Login /> Component', () => {
let wrapper;
const props = {
};
beforeEach(() => {
wrapper = mount(<Login {...props} />);
});
describe('<Login /> rendering', () => {
test('should call fields change method', () => {
const instance = wrapper.instance();
const spyChange = jest.spyOn(instance, 'handleChangeFields');
const input = wrapper.find('input').at(0);
input.simulate('change', { target: { value: 'test@test.com' } });
expect(spyChange).toHaveBeenCalled();
expect(wrapper.state().activeBtn).toBeFalsy();
});
});
});
但是测试没有通过,我有一个错误:
Expected number of calls: >= 1
Received number of calls: 0
我不知道为什么jest.spyOn无法检测到mwthod调用。我在做什么错了?