【问题标题】:Method “simulate” is meant to be run on 1 node. 0 found instead方法“模拟”意味着在 1 个节点上运行。找到了 0 个
【发布时间】:2019-07-07 09:59:34
【问题描述】:

我最近使用 ThemeProvider 将我的组件包装在测试中。当我运行测试时,它会抛出以下错误

'方法“模拟”意味着在 1 个节点上运行。找到了 0 个'

在包装之前它工作正常。我该如何解决这个问题?我在 GitHub 中发现了许多类似的问题,我尝试了所有这些方法,但仍然遇到相同的错误。

包装前的代码:

 test('handleSelect function called on option select', () => {
    const handleSelectSpy = sinon.spy();
    wrapper = mount( 
        <Dropdown handleSelect={handleSelectSpy} options={options} />
    );
    dropdown = wrapper.find('Dropdown');
    dropdown
      .find('InputBase')
      .find('[role="button"]')
      .simulate('click');
    expect(true).toBe(true);
  });
});

包装后的代码:

 test('handleSelect function called on option select', () => {
    const handleSelectSpy = sinon.spy();
    wrapper = mount(
      <ThemeProvider>
        <Dropdown handleSelect={handleSelectSpy} options={options} />
      </ThemeProvider>,
    );
    dropdown = wrapper.find('Dropdown');
    dropdown
      .find('InputBase')
      .find('[role="button"]')
      .simulate('click');
    expect(true).toBe(true);
  });
}); 

错误: 下拉菜单 - 完整的 DOM 渲染 › 选项选择时调用的 handleSelect 函数 方法“模拟”意味着在 1 个节点上运行。找到了 0 个。

【问题讨论】:

    标签: jestjs enzyme


    【解决方案1】:
    .find('InputBase')
    

    如果这是一个组件类名/构造函数,它应该不带引号:

    .find(InputBase)
    

    只有 CSS 选择器才能在引号内使用。

    【讨论】:

    • 事实上这并不是 Enzyme API Reference 所说的。虽然not recommended,一个React组件may be searched by its display name,它是一个字符串。
    • 重要提示:我在忘记导入组件时也遇到了这个问题。就像,在这个例子中,如果我忘记将 InputBase 组件导入我的测试文件,并试图通过其构造函数 .find(InputBase) 找到它,运行测试时 Jest 会显示类似 Method "someFunction" is meant to be run on 1 node. 0 found instead 的错误。我花了 一些 分钟试图弄清楚发生了什么。
    猜你喜欢
    • 2019-07-14
    • 2019-07-20
    • 2021-03-09
    • 2019-07-20
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多