【问题标题】:React Testing Library - multiple fireEvent doesn't check textReact 测试库 - 多个 fireEvent 不检查文本
【发布时间】:2020-11-16 19:24:57
【问题描述】:

我想给我的组件发短信。我有带选择的表格和带文本的段落。当我从选择 6 中选择时,段落将文本更改为“6 件”。当我从选择 9 中选择时,段落将文本更改为“9 件”等。

问题是,它只适用于第一次。第二个我在段落中有旧文本。如何刷新每个选择更改?

const { getByTestId } = renderForm();

const textElem = getByTestId('text');
const select = getByTestId('select');


fireEvent.change(select, { target: { value: '6' } });

// works fine
expect(textElem).toHaveTextContent('6 pieces');


fireEvent.change(select, { target: { value: '9' } });

// is still 6 pieces
expect(textElem).toHaveTextContent('9 pieces');

我也尝试过 act,但我得到了相同的结果:

act(()=>{
    fireEvent.change(select, { target: { value: '6' } });
});

// works fine
expect(textElem).toHaveTextContent('6 pieces');


act(()=>{
    fireEvent.change(select, { target: { value: '9' } });
});

// is still 6 pieces
expect(textElem).toHaveTextContent('9 pieces');

我也尝试了rerender - 结果相同。

【问题讨论】:

  • 您能在codesandbox 中复制吗?
  • 我无法创建代码框,因为结构有点复杂;)

标签: react-testing-library


【解决方案1】:

触发更改后,您需要创建一个新的getByTestId() 并对其进行断言。

fireEvent.change(select, { target: { value: '9' } }); expect(getByTestId('text')).toHaveTextContent('9 pieces')

【讨论】:

  • 不幸的是,我仍然得到 6 件。我的输入包含在 Fornik 中。所以我在 Formik 中修改了值。第一次更改是 6,但第二次更改仍然是 6。所以我必须想办法更新它。
  • 我看到 fireEvent.change 只运行一次:/
猜你喜欢
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2021-01-08
  • 1970-01-01
  • 2021-08-23
  • 2019-10-09
相关资源
最近更新 更多