我进行了以下测试以查看状态是否已设置。
const setState = jest.fn();
const useStateSpy = jest.spyOn(React, 'useState');
useStateSpy.mockImplementation((init) => [init, setState]);
it('should update state upon changing department in select field', () => {
const select = wrapper.find('select');
select.instance().value = 'Customer Success';
select.simulate('change');
expect(setState).toHaveBeenCalledWith('Customer Success');
});
我使用以下代码设置状态。
import React, { useState, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { postJobAction } from './redux/postJobActions';
const PostJobComponent = () => {
const [department, setDepartment] = useState('');
const onPostJobSubmit = (event) => {
event.preventDefault();
dispatch(postJobAction({
department,
}));
};
const onDepartmentChange = (event) => {
setDepartment(event.target.value);
};
return (
<div className='post-job'>
<form onSubmit={onPostJobSubmit}>
<div>
<label>Department</label>
<select className='job__department' required onChange={onDepartmentChange}>
<option value=''>Select</option>
<option value='Customer Success'>Customer Success</option>
<option value='Professional Services'>Professional Services</option>
<option value='Service Support'>Service And Support</option>
<option value='Engineering'>Engineering</option>
</select>
</div>
<div>
<button>Save</button>
</div>
</form>
</div>
);
};
export default PostJobComponent;
如您所见,我正在 onDepartmentChange
上调用 select
函数。但是,它在代码中工作得很好,当我运行测试时,它显示了这个错误。
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: "Customer Success"
Number of calls: 0
69 | select.instance().value = 'Customer Success';
70 | select.simulate('change');
> 71 | expect(setState).toHaveBeenCalledWith('Customer Success');
| ^
72 | });
知道我做错了什么以及如何解决这个问题吗?