如何在使用样式化组件的React组件中测试字符串“…loading”?

问题描述 投票:0回答:1

您如何编写样式化组件的笑话酶断言?

通常我会这样设置测试:

import React from 'react';
import { shallow } from 'enzyme';
// test-setup.js
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import Post from '../components/Post';
import Header from '../components/Header';
import HeaderDefaultPropsInit from './default-props/Header.defaultProps';
//import localStorage from './../../setUpTests';

configure({ adapter: new Adapter() });

describe('The header before all of the articles have been read', () => {
  let wrapper;
  beforeEach(() => {
    const defaultProps = {
      ...HeaderDefaultPropsInit,
      fetchPost: jest.fn(),
      history: {
        push: jest.fn(),
      },

    };
    wrapper = shallow(<Header  {...defaultProps} />);
  });

包装器的输出看起来几乎像一个普通的html块。通常,我使用wrapper.find('some-element')这样写断言:

it('renders the image correctly', () => {
     expect(wrapper.find('.image').hasClass('image')).toBe(true);
   });

但是这是为了测试由酶渲染的jsx的输出,并且该输出易于遍历,因为您可以使用jQuery类型语法,因为它就像html一样出现。

但是:

当我使用样式化组件时,console.log(wrapper.debug())是这个:

  <styled.div>
        <styled.div color={[undefined]}>
          <styled.span>
            ...loading
          </styled.span>
          <br />
          <strong className="h4">
            <styled.span />
          </strong>
        </styled.div>
      </styled.div>

震惊恐怖,没有正常的html元素可为其编写正常的断言!

你到底如何写断言:

<styled.div>

而不是

<div class="some-class">

没有什么可将一个元素与另一个元素区分开

expect(wrapper.find('styled.div').contains('..loading')).toBe(true);

可以引用任何styled.div

我只想测试它是否包含'..loading'消息。我必须缺少明显的东西-其他人怎么做?

reactjs enzyme styled-components jest
1个回答
0
投票

答案是在创建样式后的组件后为其指定显示名称。

const CalloutWrapper = styled.div`
  width: 450px;
`;


CalloutWrapper.displayName = 'CalloutWrapper';

然后使用console.log(wrapper.debug())渲染时>

看起来像这样:

 <CalloutWrapper>
   ...loading
 </CalloutWrapper>

您几乎可以像往常一样进行断言

 it('it renders  the loading message', () => {
    expect(wrapper.find('CalloutWrapper').html()).toContain('...loading');
  });

请参见https://github.com/styled-components/styled-components/issues/896

© www.soinside.com 2019 - 2024. All rights reserved.