Reactjs Jest:如何在onChange方法中更新模拟函数的值?
在下面的代码中,除了onChange方法中的值的更新之外,其他一切都可以工作 它的预期工作方式是:Reactjs Jest:如何在onChange方法中更新模拟函数的值?,reactjs,jestjs,Reactjs,Jestjs,在下面的代码中,除了onChange方法中的值的更新之外,其他一切都可以工作 它的预期工作方式是: 初始值为空字符串(✓ (工程) 进行更改时,该值应为更改的值(✗ (不起作用) const mockSetFieldValue=jest.fn(()=>“”); 之前(异步()=>{ 字段={ 名称:“密码”, 值:mockSetFieldValue(), //^^^将拾取初始值,但不会拾取onChange中的更改 onChange:(e)=>{ console.log(e.target.va
- 初始值为空字符串(✓ (工程)
- 进行更改时,该值应为更改的值(✗ (不起作用)
const mockSetFieldValue=jest.fn(()=>“”);
之前(异步()=>{
字段={
名称:“密码”,
值:mockSetFieldValue(),
//^^^将拾取初始值,但不会拾取onChange中的更改
onChange:(e)=>{
console.log(e.target.value)//返回:foo123
mockSetFieldValue.mockReturnValue(()=>e.target.value);
//^^^这不会更新该值
},
};
树=(
密码
);
});
它('输入接受值',()=>{
const{getByLabelText}=render(树);
const input=getByLabelText(/Password/i);
change(输入,{target:{value:'foo123'});
expect(input.value).toBe('foo123');
});
如何更新onChange方法来更改组件中设置的值
我曾经尝试过
mockImplementationOnce
和mockReturnValue
。但他们似乎不是这样工作的 field.value
在所有测试之前使用mockSetFieldValue
函数的当前值设置一次,该函数返回空字符串。因此,更改mockSetFieldValue
函数无效
您需要能够在onChange
中设置字段.value
,您可以这样做:
onChange: (e) => {
field.value = e.target.value;
},
最好模拟整个onChange
函数:
const mockOnChange= jest.fn();
beforeAll(async () => {
field = {
name: 'password',
value: '',
onChange: mockOnChange,
};
//...
});
然后在测试中:
mockOnChange.mockImplementationOnce((e) => { field.value = e.target.value });
fireEvent.change(input, { target: { value: 'foo123' } });
mockOnChange.mockImplementationOnce((e) => { field.value = e.target.value });
fireEvent.change(input, { target: { value: 'foo123' } });