5

我正在使用 RTL 测试一个反应组件,每次我运行测试时,我都会得到,

"messageParent" can only be used inside a worker

**这是代码

describe('Header', () => {
  it('validates header component is rendered', () => {
    const { getByTestId } = render(<Header patientName="Jake Bland" />);
    expect(getByTestId('patient-name')).toHaveTextContent(/^Jake Bland$/);
    expect(getByTestId('dateRange')).toBe(dateRange);
  });
});

对此的任何帮助将不胜感激。

4

4 回答 4

12

我遇到了同样的问题,它是由调用HTMLElement引起toBe()的。toEqual()所以你最有可能的罪魁祸首在这里,因为getByTestId返回一个 HTMLElement:

expect(getByTestId('dateRange')).toBe(dateRange);

我通过测试元素的文本内容来解决我的问题。

expect(getByTestId('dateRange')).toHaveTextContent('...');

于 2021-07-19T07:31:18.443 回答
0

<select>我在测试 a是否有正确数量的选项时遇到了这个错误,当使用这个时:

expect(container.querySelectorAll('option')).toBe(2);

@testing-library/react 必须尝试做一些奇怪的事情来获取 HTML 集合的长度,我有。所以我添加.length到查询中:

expect(container.querySelectorAll('option').length).toBe(2);

一切都好。

于 2022-03-04T17:37:34.827 回答
0

嗨,我花了一些时间谷歌搜索后遇到了同样的问题,我发现了这个:github问题论坛

事实证明,这个问题是由 node12 版本引起的,我将我的版本降级到版本 10,一切正常,我也升级到版本 14,这也有效。

在您的终端中检查您的节点版本是什么:

  1. node -v if (version 12) 升级吧!
  2. nvm install v14.8.0 (类似this或leates one)
  3. nvm 使用 v14.8.0(或任何其他您可能希望安装的高于 12 的版本)

希望这会有所帮助

于 2021-06-30T23:37:24.737 回答
0

终端上的错误信息 我有同样的错误,但我能够通过在我的测试文件中导入 '@testing-library/jest-dom' 来修复它,如下所示:

import '@testing-library/jest-dom'

事实证明,上面的包是“@testing-library/react”的 peerDependency。因此错误。

如果您觉得这很有用,请点个赞,以便其他开发人员可以受益。

修复后, 像这样修复err0r

结果: 测试通过

于 2021-11-01T15:10:25.813 回答