Проблема с react-addon-test-utils createElement

Я обновляю свой код из устаревшего пакета react/addons в пакет react-addon-test-utils. Я использую jsdom и вставляю элемент документа и окна, как показано ниже.

import jsdom from 'jsdom';
import chai from 'chai';
import chaiImmutable from 'chai-immutable';

const doc = jsdom.jsdom('<!doctype html><html><body></body></html>');
const win = doc.defaultView;

global.document = doc;
global.window = win;

Object.keys(window).forEach((key) => {
  if (!(key in global)) {
    global[key] = window[key];
  }
});

chai.use(chaiImmutable);

И вот мой модульный тест.

import {expect} from 'chai';
import ErrorBlock from '../src/Controls/ErrorBlock';
import React from 'react-addons-test-utils';

const {renderIntoDocument, scryRenderedDOMComponentsWithClass, Simulate}
  = React;

describe('ErrorBlock', () => {

  it('renders properly', () => {
    const id = 'test';
    const message = 'my message';
    const alertStyle = "alert-danger";
    const component = renderIntoDocument(
      <ErrorBlock id={id} message={message} alertStyle={alertStyle} />
    );
    const spanEntry = scryRenderedDOMComponentsWithClass(component, id + 'AlertMessage');
    expect (spanEntry.length).to.equal(1);
  });
});

Я нахожусь в процессе настройки модульного тестирования для модуля пользовательского интерфейса React для использования в некоторых проектах. Однако, когда я переключаюсь на новый пакет react-addons-test-utils, я получаю следующую ошибку:

TypeError: _reactAddonsTestUtils2.default.createElement is not a function

Эта ошибка возникает в строке, где я определяю свой компонент.

Почему я получаю эту ошибку ТОЛЬКО при использовании нового пакета?


person Sinistralis    schedule 28.12.2015    source источник
comment
facebook.github.io/react/docs/ вы необходимо, чтобы window, window.document и window.document.createElement были глобально доступны перед импортом React.   -  person oobgam    schedule 28.12.2015
comment
Вот почему я включил первый блок кода. Они уже есть.   -  person Sinistralis    schedule 28.12.2015
comment
Извините, я не думаю, что вижу window.document.createElement глобально доступным и вижу только эти global.document = doc; global.window = win;.   -  person oobgam    schedule 28.12.2015
comment
Это то, что делает .forEach. Я также могу показать вам вывод из console.log(document.window.createElement). Поверьте мне, это там.   -  person Sinistralis    schedule 28.12.2015
comment
@Sinistralis Вы решили проблему? У меня такая же проблема.   -  person Sergey    schedule 25.01.2016
comment
Нет, я не использовал устаревшую версию, пока не нашел ответ.   -  person Sinistralis    schedule 25.01.2016
comment
Просто следуя этому, я с тех пор перешел на Teaspoon для тестирования и, возможно, перешел на Enzyme. Инструменты в этих библиотеках довольно хороши, поэтому всем, у кого есть эта проблема, я рекомендую изучить их.   -  person Sinistralis    schedule 19.05.2016


Ответы (1)


Может быть поздно, но я думаю, что это наше решение. Пусть изменится с :

const doc = jsdom.jsdom('<!doctype html><html><body></body></html>');
const win = doc.defaultView;

global.document = doc;
global.window = win;

to :

const doc = new jsdom.JSDOM('<!doctype html><html><body></body></html>');
const win = doc.window;

global.document = win.document;
global.window = win;

Это решит все наши проблемы

person voxter    schedule 16.06.2017