Фермент / Jest провал тест на реквизит - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть компонент, который получает опору, которая называется license.Я пытаюсь протестировать несколько вещей, но у меня ничего не получается.

По сути, я хочу проверить, что если мое свойство присутствует, то показать определенный элемент с class или другой компонент.У меня есть несколько.

Вот мой тест, в котором я пытаюсь проверить, что если у меня есть prop.license.expiredAt, верно, то компонент Icon должен присутствовать:

  it('expects to show LicenseInfo if license prop is true', () => {
    const props = {
      license: {
        clientId: '01',
        expiredAt: 1551391198000,
        isValid: true,     }
    };
    const wrapper = shallow(
      <LicenseInfo license={props.license}>
        <div>test</div>
      </LicenseInfo>
    );
    const html = wrapper.find(<Icon icon="test" />).html();
    expect(html).toContain(props.license.expiry);
  });
});

Но я получаю ошибку:

 FAIL  src/LicenseInfo/__tests__/index.test.tsx (8.156s)
  ● LicenseInfo Component › expects to show LicenseInfo if license prop is true

    Method “html” is meant to be run on 1 node. 0 found instead.

      30 |       </LicenseInfo>
      31 |     );
    > 32 |     const html = wrapper.find(<Icon icon="test" />).html();
         |                                                     ^
      33 |     expect(html).toContain(props.license);
      34 |   });
      35 | });

      at ShallowWrapper.single (node_modules/enzyme/build/ShallowWrapper.js:1875:17)
      at ShallowWrapper.html (node_modules/enzyme/build/ShallowWrapper.js:1032:21)
      at Object.it (src/shared/common/components/panel/LicenseInfo/__tests__/index.test.tsx:32:53)

И вот мой компонент:

/* eslint-disable react/default-props-match-prop-types */
import React, { Fragment } from 'react';
import moment from 'moment';
import ILicense from 'dto/ILicense';

import PageHeader from 'components/PageHeader';
import Icon from 'components/Icon';

export interface Props {
  license: ILicense;
}

// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
const LicenseInfo = <T extends object>({ license }: Props & T) =>(
  <Fragment>
    {license ? (
      <Fragment>
        <div className="container mt-5">
          <PageHeader className="font-weight-bold">License Information</PageHeader>
          <div className="container bg-white">
            <div className="py-5 ml-3">
              {license.expiredAt ? (
                <div className="mb-5">
                  <Icon icon="check" className="fa-lg text-success" />
                  Your License is Valid
                </div>
              ) : (
                <div className="mb-5">
                  <Icon icon="exclamation-circle" className="fa-lg text-danger" />
                  YourLicense has expired
                </div>
              )}
              <table className="table col-6">
                <tbody>
                  <tr>
                    <td>Valid Until:</td>
                    <td className="font-weight-bold">
                      {moment(license.expiredAt).format('YYYY-MM-DD HH:mm:ss')}
                    </td>
                  </tr>
                </tbody>
              </table>
            </div>
          </div>
        </div>
      </Fragment>
    ) : null}
  </Fragment>
);

LicenseInfo.defaultProps = {
  clientId: '',
  expiredAt: null,
  isValid: false,
};

export default LicenseInfo;

Я действительно новичок в тестировании, поэтому, если я что-то забыл, пожалуйста, спросите, и я предоставлю,Я немного борюсь и хотел бы помочь.Объяснение

1 Ответ

0 голосов
/ 19 февраля 2019

Я бы предложил использовать Snapshot Testing для записи состояния, а не фокусироваться на конкретных свойствах.просто использование

expect(wrapper).toMatchSnapshot();

также shallow не отображает DOM дочерних компонентов, поэтому, возможно, вы захотите использовать mount вместо того, чтобы иметь возможность доступа к полной DOM, сгенерированной компонентом (то есть с помощью селекторов),Возможно, свойства, которые вы пытаетесь установить для значков, просто не отображаются при поверхностном рендеринге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...