Тестирование React PropTypes с помощью sinon

В качестве примера я использовал Заставить предупреждения React PropType выдавать ошибки с помощью фермента.js + sinon.js + mocha.js< /а>.

У меня есть компонент React с одной необходимой опорой:

class Pagination extends Component {
    render() {
        return (
            ... render some stuff
        );
    }
}

Pagination.propTypes = {
    total: PropTypes.number.isRequired
};

И это тест для него:

describe('(Component) Pagination', () => {
      before(() => {
         sinon.stub(console, 'error', (warning) => { throw new Error(warning) })
      })
      after(() => { console.error.restore() })

      it('render fails without props', () => {
          shallow(<Pagination />);
      });

      it('render fails without props2', () => {
        shallow(<Pagination />);
      });
    });

После запуска этих тестов первый вылетает, а второй нет. Тесты похожи. Я думаю, что проблема в том, что React выдает предупреждающие сообщения только один раз. Как этого избежать?

Я хочу иметь 2 теста: один будет падать, если реквизиты не установлены, а второй отлично работает с реквизитами.


person Alekstim    schedule 29.11.2016    source источник
comment
так вы пробовали beforeEach() и afterEach() для очистки после каждого теста? Если да, то сработало ли это для вас?   -  person PositiveGuy    schedule 26.02.2017


Ответы (1)


Вы можете найти обходной путь здесь:

Pagination.displayName = Math.random().toString();

Вы, видимо, были правы, что это из-за одного и того же компонента, и если вы делаете это перед каждым тестом, то он его обманывает. Просто хак, но он работает. Видимо лучше некуда.

P.S. Я сделал это в beforeEach, чтобы самому не писать это в каждом тесте. П.П.С. random не самый надежный, так как вы можете получить то же имя, и оно потерпит неудачу, руководство или что-то еще можно использовать, если оно недостаточно хорошее, это просто пример.

person Ilya Chernomordik    schedule 02.12.2016
comment
лично я думаю, что другим разработчикам будет гораздо более очевидно, если вы добавите такую ​​​​вещь в beforeEach. - person PositiveGuy; 26.02.2017