2

Enzyme を使用して反応コンポーネントをテストしていますが、次のエラーが発生します。

不変違反: 危険なRenderMarkup(...): ワーカー スレッドでマークアップをレンダリングできません。単体テスト時に React を要求する前にグローバルに使用できることを確認するかwindow、サーバー レンダリングに ReactDOMServer.renderToString を使用します。document

「酵素」を必要とする前に、jsdomに次のセットアップを追加しました(いくつかの場所で読んだように):

const baseMarkup = '<!DOCTYPE html><html><head><title></title></head><body></body></html>';
const window = require('jsdom').jsdom(baseMarkup).defaultView;

global.window = window;
global.document = window.document;
global.navigator = window.navigator;

const React = require('react');
const {mount} = require('enzyme');
const sinon = require('sinon');
const SortableInput = require('../../../src/components/sortableInput/sortableInput').default;

ここで何が間違っていますか?

編集

サーバー側のレンダリングには関係ないと思います。メッセージは、単体テストとサーバー側のレンダリングに関する一般的なものです。

4

3 に答える 3

3

誰かが同じ問題を抱えている場合に備えて、自分の質問に答えます。これは最終的に私のために働いたものでした:

import 'jsdom-global/register';

describe('My awesome component test', () => {
  let cleanup;

  beforeEach(() => cleanup = require('jsdom-global')());

  afterEach(() => cleanup());

  ....
})
于 2016-11-13T12:43:01.970 に答える
1

私のプロジェクトの 1 つで、これは JSDOM を初期化するコードであり、正常に動作しています。

import { jsdom } from 'jsdom';

before(() => {
  global.document = jsdom('');
  global.window = document.defaultView;
});

before() は Mocha のルートフックです。すべてのテストの開始前に実行されます。

于 2016-09-11T15:00:08.353 に答える