开发者问题收集

带有 className 的 React Enzyme Jest 测试组件

2018-03-21
50634

我 按照 Enzyme 中 .find() 的示例和 GitHub 上的 enzyme-example-jest 示例获取一个基本组件来测试并验证最外层元素 className 是否存在,我不明白为什么这没有通过:

// REACT COMPONENT

class VisitorShortcut extends Component {
//all the props & lifecycle hooks here
render() {
        return (
            <div className="visitor-shortcuts"> // <-- this className is being tested
                <div
                    onClick={e => e.stopPropagation()}
                    className="dropdown open"
                >
                    <ul
                        style={style}
                        ref="shortcutContainer"
                        className={"dropdown-menu "}
                    >
                        {results}
                    </ul>
                </div>
            </div>
        );
    }
}

// TEST FILE

import React from "react";
import { shallow, mount } from "enzyme";
import VisitorShortcut from "../VisitorShortcut";

describe("Shortcuts", () => {
  test("The main Class exists", () => {
    expect(
        (<VisitorShortcut />).find(".visitor-shortcuts").length
    ).toBe(1);
  });
});

// OUTPUT

Expected value to be (using ===):
  1
Received:
  0

如果我切换到 expect(wrapper.find('div.some-class')).to.have.length(3); 根据 Enzyme 文档,输出为 TypeError: Cannot read property 'have' of undefined

我很确定我不需要使用 mount API 而不是 shallow

感谢您帮助澄清这一点。这看起来很基础...

3个回答

以下代码对我有用

import React from "react";
import { shallow, mount } from "enzyme";
import { assert } from 'chai';
import VisitorShortcut from "../VisitorShortcut";    


describe("Shortcuts", () => {
  test("The main Class exists", () => {
    const wrapper = shallow(<VisitorShortcut />);
    const visitorShortcutsWrapper = wrapper.find('.visitor-shortcuts');
    assert.equal(visitorShortcutsWrapper.length, 1);
  });
});

顺便说一下,我正在使用 chai 包中的 assert

Chirag Swadia
2018-03-21

根据 Enzyme 文档,您可以执行以下操作:

const wrapper = shallow(<VisitorShortcut />);
expect(wrapper.find("div.visitor-shortcuts").length).toBe(1)
Pramod
2020-11-28

我使用 chai ,它有效。

import React from 'react';
import { shallow } from 'enzyme';
import { expect } from 'chai';
import App from './App';

describe('<App />', () => {
  const wrapper = shallow(<App />);

  it('should have an App class', () => {
    expect(wrapper.find('.App')).to.have.length(1);
  });
});
mfakhrusy
2018-03-25