2016-02-06 11 views
7

की आवश्यकता होती है, तो मैं एंजाइम के describeWithDOM() और mount() का उपयोग कर एक प्रतिक्रिया घटक व्यवहार का परीक्षण करने का प्रयास कर रहा हूं। लेकिन जब घटक आयात jQuery मैं इस त्रुटि मिलती है:एंजाइम एक त्रुटि फेंकता है यदि प्रतिक्रिया घटक को jQuery

त्रुटि: jQuery एक दस्तावेज

मैं जानता हूँ कि एनजाइम हुड के नीचे jsdom का उपयोग करता है के साथ एक खिड़की की आवश्यकता है, और मुझे हमेशा यही लगता jsdom खिड़की और दस्तावेज़ के ख्याल रखा । लेकिन मुझे लगता है कि इन्हें एक साथ काम करने के तरीके को नहीं मिल रहा है।

परीक्षण कोड इस तरह दिखता है:

import chai, {expect} from 'chai'; 
import Select from './Select'; 
import React, {createElement} from 'react'; 
import {describeWithDOM, mount} from 'enzyme'; 

describe('UI Select',() => { 

    //more shallow tests here 

    describeWithDOM('User Actions',() => { 
    it('Toggles the .ui-options menu on button click',() => { 
     const wrapper = mount(<Select {...baseProps} />); 
     expect(wrapper.state().open).to.not.be.ok; 
     wrapper.find('button').simulate('click'); 
     expect(wrapper.state().open).to.be.ok; 
    }); 
    }); 
} 

बटन onClick विधि एक jQuery समारोह कहा जाता है: $('#inputSelector').focus()

मैं कैसे परीक्षण में एंजाइम और jsdom उपयोग jQuery दे सकते हैं?

+0

किया आपने समस्या हल की है? – pluralism

+1

@ बहुवचनवाद हां यह किया। स्वीकृत ट्रेवर जवाब। – Barry127

उत्तर

4

describeWithDOM एनजाइम के वर्तमान संस्करण में हटा दिया गया है, और बदले में यह स्पष्ट रूप से अपने परीक्षण के सभी से पहले global.document और global.window प्रारंभ करने में दिखाया गया है here सिफारिश की है। मैं jQuery का उपयोग नहीं करता, लेकिन मुझे लगता है कि इसे "दस्तावेज़ के साथ विंडो" प्रदान करना चाहिए जिसे वह ढूंढ रहा है।

प्रवर्तन कोड है कि एंजाइम के अपने परीक्षण उपयोग अपने withDom.js फ़ाइल में उपलब्ध है:

if (!global.document) { 
    try { 
    const jsdom = require('jsdom').jsdom; // could throw 

    const 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', 
    }; 
    } catch (e) { 
    // jsdom is not supported... 
    } 
} 

वे मोचा के --require विकल्प का उपयोग यह परीक्षण में से किसी से पहले निष्पादित करता है सुनिश्चित करने के लिए:

mocha --require withDom.js --compilers js:babel-core/register --recursive test/*.js --reporter dot

संबंधित मुद्दे