【发布时间】:2021-04-22 10:25:32
【问题描述】:
当我单击按钮时,它会将值增加输入中写入的数量,当我在应用程序中执行此操作时它会起作用,但是当我尝试使用 Jest 并且首先 fireEvent.change() 将输入的值设置为 10 然后fireEvent.click() 在按钮上它不会增加它并且值保持在0。
这是我得到的错误:
expect(received).toBe(expected) // Object.is equality
Expected: 10
Received: 0
33 | fireEvent.click(btnPlus);
34 |
> 35 | expect(parseInt(val.textContent)).toBe(10);
| ^
36 | });
37 | });
38 |
这里是测试文件:
import React from 'react';
import Counter from './Counter';
import { render, fireEvent } from '@testing-library/react';
describe('Counter works', () => {
let comp;
let inp;
let btnPlus;
let val;
beforeAll(() => {
comp = render(<Counter />);
inp = comp.getByTestId('inp');
btnPlus = comp.getByTestId('btn-+');
val = comp.getByTestId('counter-value');
});
it('Counter exists', () => {
expect(comp).toBeTruthy();
});
it('Input works', () => {
expect(inp.value).toBe('');
fireEvent.change(inp, {
target: {
value: 10,
},
});
expect(parseInt(inp.value)).toBe(10);
fireEvent.click(btnPlus);
expect(parseInt(val.textContent)).toBe(10);
});
});
通用计数器文件:
const Counter = () => {
const [state, setState] = useState({
count: 0,
inpText: '',
});
const setNum = (num) => {
setState((prev) => {
return {
...prev,
count: prev.count + num,
};
});
};
const setInp = (e) => {
setState((prev) => {
return {
...prev,
inpText: e?.target.value,
};
});
};
return (
<>
<h1
data-testid='counter-value'
style={{
color: 'white',
position: 'absolute',
top: '45%',
left: '50%',
transform: 'translate(-50%,-60%)',
}}>
{state.count}
</h1>
<div id='flex'>
<Button setNum={setNum} plus='+' num={parseInt(state.inpText)} />
<input data-testid='inp' value={state.inpText} onChange={setInp} />
<Button setNum={setNum} plus='-' num={-parseInt(state.inpText)} />
</div>
</>
);
};
还有按钮:
const Button = (props) => {
return (
<button
data-testid={`btn-${props.plus}`}
onClick={() => {
props.setNum(props.num);
}}>
{props.plus}
</button>
);
};
【问题讨论】:
-
如果你正在测试
Counter,你不想打电话给render(<Button />)。Buttons 将作为Counter渲染的一部分进行渲染。 -
如何在 Counter 内部引用 Button 组件?我可以将 data-testid 添加到 react 组件吗?
-
您只需通过
data-testids 访问按钮:btn--&btn-+。 -
我更新了测试文件,以便它从 Counter 组件中获取按钮的 data-testid,但它似乎没有改变任何东西,我得到了完全相同的错误。
-
我还通过
expect(btnPlus).toBeTruthy()检查了btnPlus是否存在,并没有收到错误,但它仍然没有增加值。
标签: javascript reactjs jestjs react-testing-library