繁体   English   中英

使用 Enzyme Jest 测试 React 组件,发现 HTML 元素

[英]Testing React component with Enzyme Jest finding HTML element

我有一个名为Typography的组件,它接受一个variant道具并相应地呈现一个元素。

排版.js

为了简洁省略了很多

import { StyledH1, ... } from './Typography.styles';

const variantMapping = {h1: StyledH1, ...};

const Typography = ({ children, ...props }) => {
  const Component = variantMapping[props.variant] ? variantMapping[props.variant] : 'span';

  return <Component {...props}>{children}</Component>;
};

因此,我尝试了多种方法来获得有效的测试。 现在我正在尝试传递variant="h1" ,取回以下标记<h1 class="..styled component what nots...">...</h1>并验证<h1>呈现

Typography.spec.js

import { mount } from 'enzyme';
import Typography from '.';

describe('<Typography />', () => {
  it('renders H1', () => {
    const wrapper = mount(<Typography variant="h1" />);
    const elem = wrapper;
    console.log(elem.debug());
    expect(wrapper.find('h1')).toEqual(true);
  });
});

所以运行调试器我回来了

console.log components/Typography/Typography.spec.js:9
    <Typography variant="h1" bold={false} transform={{...}} small={false}>
      <Typographystyles__StyledH1 variant="h1" bold={false} transform={{...}} small={false}>
        <StyledComponent variant="h1" bold={false} transform={{...}} small={false} forwardedComponent={{...}} forwardedRef={{...}}>
          <h1 transform={{...}} className="Typographystyles__StyledH1-sc-1n6ui1k-0 bvGdAG" />
        </StyledComponent>
      </Typographystyles__StyledH1>
    </Typography>

所以我改变了元素变量以找到 h1 元素const elem = wrapper.find('h1');

调试器返回

console.log components/Typography/Typography.spec.js:9
<h1 transform={{...}} className="Typographystyles__StyledH1-sc-1n6ui1k-0 bvGdAG" />

我不确定这是否是正确的方法,只是尝试获得至少 1 次合理通过的测试。

在这一点上,我写的每条expect语句都会返回错误或失败

  • expect(elem).to.have.lengthOf(1); TypeError:无法读取未定义的属性“拥有”
  • expect(elem.contains('h1')).to.equal(true); TypeError:无法读取未定义的属性“等于”
  • expect(elem.contains('h1')).toEqual(true); expect(received).toEqual(expected) // 深度相等

尝试了更多选项,但没有任何效果。 任何帮助将不胜感激。

酶全dom安装:

.find(selector) => ReactWrapper返回一个包装器,而不是 boolean

it('renders H1', () => {
  const wrapper = mount(<Typography variant="h1" />);
  const elem = wrapper;
  console.log(elem.debug());
  expect(elem.find('h1')).to.have.length(1);
});

.contains(nodeOrNodes) => boolean - 这是常见问题的链接,特别是它需要一个反应元素,而不是 html 元素或 Z2C56C36058042085DF293172F4

所以看起来我的断言,使用酶, expect没有设置。 进一步阅读 Enzyme 文档后,我的设置仅使用适配器,以便更轻松地渲染/安装组件。 我没有能力使用文档中的酶断言,因为它们没有安装。 为了回答这个特殊问题,我必须使用 Jest 断言。

describe('<Typography />', () => {
  it('renders h1', () => {
    const wrapper = mount(<Typography variant="h1" />);
    const elem = wrapper.find('h1');
    expect(elem.length).toBe(1);
  });
});

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM