2016-09-06 13 views
1

테스트 환경을 설정하는 동안 다음과 같은 문제가 발생했습니다. 나는 (mocha ./src/test/.setup.js ./src/test/**.test.js 사용) 테스트를 실행하면, 나는 Element is not defined 오류 :React + Onsenui 앱에서 mocha 테스트를 실행할 때`ReferenceError : Element is not`가되었습니다

app\node_modules\onsenui\js\onsenui.js:603 
    var originalCreateShadowRoot = Element.prototype.createShadowRoot; 
           ^

ReferenceError: Element is not defined 
    at app\node_modules\onsenui\js\onsenui.js:603:34 
    at app\node_modules\onsenui\js\onsenui.js:359:7 
    at Array.forEach (native) 
    at initializeModules (app\node_modules\onsenui\js\onsenui.js:358:13) 
    at app\node_modules\onsenui\js\onsenui.js:908:5 
    (...) 

어떻게 이런 일이 가능한 요소는 기본 DOM 요소 아닌가요?

다음 버전

이 사용됩니다

다음 .setup.js 파일이 사용됩니다

다음과 같이
require('babel-register')({ 
    presets: ["react","airbnb","es2015"] 
}); 

var jsdom = require('jsdom').jsdom; 

var exposedProperties = ['window', 'navigator', 'document']; 

global.document = jsdom(''); 
global.window = document.defaultView; 
Object.keys(document.defaultView).forEach((property) => { 
    if (typeof global[property] === 'undefined') { 
     exposedProperties.push(property); 
     global[property] = document.defaultView[property]; 
    } 
}); 

global.navigator = { 
    userAgent: 'node.js' 
}; 

documentRef = document; 

는 그리고 테스트 파일은 다음과 같습니다

import React from 'react'; 
import { expect } from 'chai'; 
import { shallow, mount, render } from 'enzyme'; 

import * as Ons from 'react-onsenui'; 
import MainPage from '../react/MainPage/MainPage.jsx'; 

describe("Component MainPage", function() { 
    it("should have a Ons.Page component", function() { 
     const wrapper = mount(<MainPage />); 
     expect(wrapper.find(Ons.Page)).to.equal(true); 
    }); 
}); 

답변

1

onsenui 당신이 nodejs 환경에서 그것을 실행하는 동안, 브라우저 환경에 대한 기록 될 것으로 보인다.

요소는 DOM API입니다. nodejs에는 DOM이 없습니다.

노드 j의 브라우저 DOM을 모방 한 노드 모듈 인 jsDom을 사용하여 조사 할 수 있습니다.

편집 : 이 패키지가 문제를 해결할 수 있다고 생각합니다. https://github.com/rstacruz/jsdom-global 전역에 '요소'속성을 배치해야합니다.

+0

이미 jsDOM을 사용하고 있습니다. 테스트 설치 파일'.setup.js '를 참조하십시오. 아마도 jsDOM은 Element API를 지원하지 않을 수 있습니까? – corneyl

+0

'jsdom-global'이 실제로이 오류를 해결했지만 여전히 다른 오류가 있습니다. jsDOM도 웹 구성 요소에 대한 지원이 부족합니다. 이 답변은 저를 가장 잘 도와 주었지만 다른 오류를 막기 위해 카르마 주자로 전환하려고합니다. – corneyl