Как имитировать подкомпоненты при модульном тестировании компонента React с помощью Jest

У меня есть компонент React, для которого я пытаюсь написать несколько тестов. Я разбил это на простейший возможный тест.

jest.dontMock('../Overlay.react.js');

import React from 'react';
import ReactDOM from 'react-dom';

var Overlay = require('../Overlay.react.js'); // this is the culprit!

describe('Overlay', () => {
    it('should work', () => {
        expect(true).toEqual(true);
    });
});

Когда требуется компонент, который я пытаюсь протестировать, он, похоже, не насмехается над его подкомпонентами. В верхней части Overlay.react.js у меня есть следующий импорт: import LoadingSpinner from 'loadingIndicator/LoadingIndicatorSpin.react'; При запуске моего теста я получаю следующую ошибку:

  • SyntaxError: /Users/dev/work/react-prototype/src/components/root/routes/components/subset1/components/Overlay.react.js: / Users / dev / work / response-prototype / src / components / root / маршруты / компоненты / loadingIndicator / LoadingIndicatorSpin.react.js: /Users/dev/work/react-prototype/src/components/root/routes/components/loadingIndicator/sass/style.sass: Неожиданный токен НЕЗАКОННЫЙ

Похоже, что вместо того, чтобы издеваться над компонентами, он переходит прямо к sass-файлу подкомпонента и подбирает его. Насколько я понимаю, Jest издевается над всем, кроме того, что вы говорите, чтобы не высмеивать.

Как правильно сформулировать эти тесты, чтобы подкомпоненты не вызывали взрыв шуток при импорте во время теста?


person Jim    schedule 01.12.2015    source источник
comment
Немного самоуверенный, но я просто думаю о тебе наперед. Вы будете получать многие из этих типов ошибок с помощью шутки, кроме того, у вас будут проблемы с производительностью, когда вы начнете тестировать что-нибудь нетривиальное. Взгляните на некоторые открытые проблемы шутки и оцените, будет ли использование мокко или жасмина лучший выбор для фреймворка тестирования.   -  person enjoylife    schedule 01.12.2015
comment
В противном случае ознакомьтесь с этим вопросом для получения дополнительных указаний.   -  person enjoylife    schedule 01.12.2015
comment
@mattclemens Интересно. Я действительно читал только о тестировании компонентов реакции с помощью шутки, так что это было по умолчанию. Я немного прочитаю ... Вопрос, с которым вы связались, больше касается передачи подкомпонентов в компонент, который вы пытаетесь протестировать, а не их импорта, как кажется.   -  person Jim    schedule 01.12.2015
comment
Ой, я плохо за то, что задала вам не относящийся к делу вопрос, думаю, я уловил его, в частности, для аспекта подкомпонента.   -  person enjoylife    schedule 01.12.2015
comment
Что еще вы используете для запуска тестов, кроме Jest? Вы используете транспилятор, например Вавилон? И (как) на материалы sass ссылаются из JS?   -  person Matt Holland    schedule 05.12.2015
comment
@MattHolland Да, я использую babel (и веб-пакет). Я использую sass-loader, чтобы требовать мои файлы sass непосредственно в моем компоненте в таком формате как require('foo/bar.sass');   -  person Jim    schedule 07.12.2015
comment
Вы решили это по-другому?   -  person Pablo Jomer    schedule 14.12.2015
comment
Что ты имеешь в виду, говоря о том, чтобы устроить истерику?   -  person Pablo Jomer    schedule 14.12.2015


Ответы (1)


Если вам потребуются файлы SASS, LESS и CSS в основном компоненте, а не в каждом подкомпоненте, вы не столкнетесь с этой проблемой, поскольку тестируете компоненты самостоятельно.

В этом отчете о проблеме упоминаются и другие решения, если вам не нравится то, что я предоставил. Проблема 334

person Pablo Jomer    schedule 14.12.2015
comment
Требование в основном компоненте позволяет избежать их импорта в компоненты более низкого уровня, но тогда вы не сможете следовать шаблону группировки файла .js компонента с его стилем. Я добавил if (filename.match(/.sass/) || filename.match(/.less/) || filename.match(/.css/)) { return ''; } в свой препроцессор, который преодолел ошибку sass, но, похоже, он задействует все хранилища и действия при запуске теста для одного компонента (а не имитирует их все). Призыв Джеста был автоматическим, кажется странным ... - person Jim; 15.12.2015
comment
Что ж, мне жаль, что я не смог помочь. Вы проверили проблему? - person Pablo Jomer; 15.12.2015