2016-11-15 9 views
1

У меня есть Реагировать компонент, который использует селектор JQuery, чтобы соответствовать высоте всех компонентов в componentDidMount():Как я могу запускать тесты на компонентах React, которые используют jQuery?

$('.js-matchHeight').matchHeight(); 

Прекрасно работает при работе серверов, как WebPack, но когда я пишу свои функции (мокко и Chai), он жалуется:

ReferenceError: $ is not defined

Как добавить jQuery в свои тесты?

ответ

1

Вы пытались добавить браузер-env к своим тестам?

import browserEnv from 'browser-env'; 
browserEnv(); 

У меня была аналогичная проблема с модульным тестом, выполненным с помощью AVA, и я думаю, что это решило проблему. Не уверен, но я думаю, что я также импортировал jQuery и/или Cheerio.

EDIT:

Ну обходной путь у меня есть, чтобы проверить против JQuery в ваших компонентов, как:

if (typeof jQuery !== 'undefined') { 
    $('.js-matchHeight').matchHeight(); 
} 

или если у вас есть JQuery в модуле импортируемого вы можете экспортировать различные компоненты версии, такие как:

module.exports = (typeof jQuery !== 'undefined') 
    ? browser(jQuery) 
    : nonBrowser(); 

Не является идеальным, но если вы хотите совершенного, вы должны держать jQuery подальше от вашего j sx Я думаю :)

+0

Спасибо @marcinrek! Я пробовал, но не работал. Я думаю, что браузерEnv не добавляет jQuery. Я также не могу импортировать jQuery в свой test.jsx, поскольку тестируемый компонент нуждается в jQuery, а не в тесте. –

+0

browserEnv не добавляет jQuery, но должен позволить вам добавить его. Я предполагаю, что вы не помещаете jQuery в свой комплект, поэтому он не определен. Если вы добавите его в свой компонент без browserEnv, это не сработает, как и окно jQuery, документ и т. Д. Вот почему я предложил добавить его - извините за то, что он не стал более понятным. Я знаю, что у меня это работает, но у меня нет доступа к этому репо из дома, поэтому, если никто не ответит до завтра, я еще раз посмотрю :) – marcinrek

+1

и если вы не тестируете что-то, что делает jQuery, вы всегда можете использовать грязный обходной путь вроде if (typeof (jQuery)! == 'undefined') {$ ('. js-matchHeight'). matchHeight(); } – marcinrek