2015-12-01 3 views
22

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

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/react-prototype/src/components/root/routes/components/loadingIndicator/LoadingIndicatorSpin.react.js: /Users/dev/work/react-prototype/src/components/root/routes/components/loadingIndicator/sass/style.sass: Unexpected token ILLEGAL

Похоже, что вместо насмешливых компонентов, он будет вплоть до суба-компоненты sass file и бросать подгонку. Мое понимание было то, что Джест издевается над всем, кроме того, что вы говорите, не макет.

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

+2

Немного упрямый, но я просто задумываюсь о вас. Вы будете получать многие из этих типов ошибок с помощью шутки, кроме того, вы будете сталкиваться с проблемами производительности, когда начинаете тестировать что-то нетривиальное. Взгляните на некоторые открытые [вопросы] (https://github.com/facebook/jest/issues/116) шутки и оцените, будет ли использование мокко или жасмина лучшим выбором для тестирования фреймворка. – enjoylife

+0

В противном случае посмотрите на [this] (http://stackoverflow.com/questions/27346687/reactjs-testing-components-containing-components) вопрос для получения дополнительных указаний. – enjoylife

+1

@mattclemens Интересно. Я только что прочитал о тестировании компонентов реакции со шуткой, так что это было по умолчанию. Я немного прочитаю ... Вопрос, с которым вы связаны, связан с тем, что подкомпоненты переданы компоненту, который вы пытаетесь протестировать, а не импортируемому. – Jim

ответ

4

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

Есть некоторые другие решения, упомянутые в этом выпуске, если вам не нравится тот, который я предоставил. Issue 334

+1

Требование в основном компоненте позволяет избежать их импорта на компонентах более низкого уровня, но затем вы не можете следовать шаблону группировки файла .js компонента с его стилей. Я добавил 'if (filename.match (/. Sass /) || filename.match (/. Less /) || filename.match (/. Css /)) { return ''; } 'моему препроцессору, который прошел мимо ошибки sass, но он, кажется, тянет каждый магазин и действие при выполнении теста для одного компонента (а не издевательства над всеми). Жалость Джеста была автомоста, кажется странной ... – Jim

+0

Хорошо, тогда я сожалею, что не мог помочь. Вы проверили вопрос? –

Смежные вопросы