首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jest和Enzyme测试Material-UI组件时,无法读取未定义的属性'have‘

使用Jest和Enzyme测试Material-UI组件时,无法读取未定义的属性'have‘
EN

Stack Overflow用户
提问于 2019-08-19 04:52:56
回答 1查看 1.1K关注 0票数 0

我正在编写Storybook教程,但使用Material-UI作为UI框架。

我已经完成了可以使用TaskTaskList组件的阶段。我开始使用Jestenzyme编写测试,这就是事情开始动摇的地方。

我的测试看起来像

代码语言:javascript
复制
import React from "react";
import ReactDOM from "react-dom";
import TaskList from "./TaskList";
import { withPinnedTasks } from "../../stories/TaskList.stories";
import { MuiThemeProvider } from "@material-ui/core";
import { theme } from "../theme";
import { createMount } from "@material-ui/core/test-utils";

describe("SearchField", () => {
  let mount;
  beforeEach(() => {
    mount = createMount();
  });

  afterEach(() => {
    mount.cleanUp();
  });

  it("renders pinned tasks at the start of the list", () => {
    const div = document.createElement("div");
    const events = { onPinTask: jest.fn(), onArchiveTask: jest.fn() };

    let wrapper = mount(
      <MuiThemeProvider theme={theme}>
        <TaskList tasks={withPinnedTasks} {...events} />
      </MuiThemeProvider>
    );

    console.log(wrapper);

    // We expect the task titled "Task 6 (pinned)" to be rendered first, not at the end
    const lastTaskInput = wrapper.find('#id').to.have.lengthOf(1);

    // querySelector(
    //   '.list-item:nth-child(1) input[value="Task 6 (pinned)"]'
    // );
    expect(lastTaskInput).not.toBe(null);

    ReactDOM.unmountComponentAtNode(div);
  });
});

当我运行yarn test时,它会失败,并显示以下错误

代码语言:javascript
复制
  ● SearchField › renders pinned tasks at the start of the list

    TypeError: Cannot read property 'have' of undefined

      30 |
      31 |     // We expect the task titled "Task 6 (pinned)" to be rendered first, not at the end
    > 32 |     const lastTaskInput = wrapper.find('#id').to.have.lengthOf(1);
         |                           ^
      33 |
      34 |     // querySelector(
      35 |     //   '.list-item:nth-child(1) input[value="Task 6 (pinned)"]'

      at Object.it (src/components/TaskList.test.js:32:27)

整个代码库可以在https://codesandbox.io/s/github/hhimanshu/storyboook-materialui-react/tree/jest上找到

但由于这是测试中的一个失败,如果您正在寻找直接的github链接,您可以在https://github.com/hhimanshu/storyboook-materialui-react/tree/jest上找到此链接

我正在寻求以下方面的帮助

  1. 此代码中的所有内容都不正确?我正在学习使用Jestenzyme进行测试,我很想知道我需要学习
  2. 如何使用MuiThemeProvider测试Material-UI自定义主题组件。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 02:41:54

我不认为.to.have是正确的jest语法,我相信酶文档采用了不同的测试框架?在这里查看jest expect方法调用中可以调用的内容

https://jestjs.io/docs/en/expect

看起来你需要像这样的东西

const lastTaskInput = expect(wrapper.find('#id').length).toEqual(1);

具体从这里开始阅读。

https://jestjs.io/docs/en/expect#toequalvalue

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57548288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档