2017-10-23 20 views
0

JestのReactアプリケーションをコマンドラインからテストしているときにEnzymeのmount機能を使用すると、次のエラーが表示されます。 DOM環境がロードされていないと言いますが、JSDOMをセットアップする必要があると思います。しかし、それはJSDOM ships with Jest and is preconfiguredがJestのFacebookの文書によると思われます。ここに私のテストです:酵素のdom環境が確実にロードされるようにする

import React from 'react' 
import MyComponent from '../src/components/MyComponent' 
import { configure } from 'enzyme' 
import Adapter from 'enzyme-adapter-react-16' 
import { mount, shallow } from 'enzyme' 
import { Menu, Dropdown, Modal } from 'semantic-ui-react' 
import renderer from 'react-test-renderer'; 

configure({ adapter: new Adapter() }) 

test('it works',() => { 
    const wrapper = mount(
     <MyComponent /> 
    ) 
    expect(wrapper.contains('foobar')).toEqual(true) 
}); 

そして、ここでエラーがあります:

Enzyme's mount expects a DOM environment to be loaded, but found none 

    at assertDomAvailable (node_modules/enzyme-adapter-utils/build/Utils.js:107:11) 
    at ReactSixteenAdapter.createMountRenderer (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:203:52) 
    at ReactSixteenAdapter.createRenderer (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:384:25) 
    at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:96:54) 
    at mount (node_modules/enzyme/build/mount.js:19:10) 
    at Object.<anonymous> (test/LinesheetModal.test.js:12:37) 
     at new Promise (<anonymous>) 

反応し-16-アダプタを酵素に関連すると思われます。どんなアイデアが間違っているのでしょうか?

+0

どのようにテストを行っていますか?コマンドラインで 'npm test'を – Akhil

+0

とすると、オプションなしで' jest'を実行するためにpackage.jsonで定義されたコマンドです – Kimberly

答えて

0

JSDOMと酵素が正しく設定されていないという問題があるようです。プリロードされたファイルとしてこのファイルを追加すると、それを修正するために冗談:

import Adapter from 'enzyme-adapter-react-16' 
import { configure } from 'enzyme' 
import jsdom from 'jsdom' 

function setUpDomEnvironment() { 
    const { JSDOM } = jsdom; 
    const dom = new JSDOM('<!doctype html><html><body></body></html>', {url: 'http://localhost/'}); 
    const { window } = dom; 

    global.window = window; 
    global.document = window.document; 
    global.navigator = { 
     userAgent: 'node.js', 
    }; 
    copyProps(window, global); 
} 

function copyProps(src, target) { 
    const props = Object.getOwnPropertyNames(src) 
     .filter(prop => typeof target[prop] === 'undefined') 
     .map(prop => Object.getOwnPropertyDescriptor(src, prop)); 
    Object.defineProperties(target, props); 
} 

setUpDomEnvironment(); 

configure({ adapter: new Adapter() }) 
0

冗談を箱から出してJSDomに設定されています、あなたはあなたの設定でtestEnvironment: jsdomを使用して確認する必要があります。

関連する問題