2017-01-03 13 views
7

मैं एक साधारण प्रतिक्रिया घटक है कि renders लिखा है एक :टेस्ट एनजाइम के साथ एक घटक प्रतिक्रिया में एक <iframe> की सामग्री

export class Iframe extends React.component { 
    render() { 
     return <iframe src={ this.props.src } />; 
    } 
} 

और मैं यह जांच करना कि सामग्री के साथ src है लोड से यह परीक्षण करने के लिए कोशिश कर रहा है के भीतर ठीक से आबादी। ऐसा करने के लिए मैं frame.contentWindow तक पहुंचने का प्रयास करता हूं, लेकिन एंजाइम के साथ इसे घुमाने के बाद यह हमेशा undefined देता है।

server = sinon.fakeServer.create(); 
server.respondWith('GET', 'test', [200, { 'Content-Type': 'text/html' }, '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>']); 
container = mount(<Iframe src='test' />); 

और <iframe src='data:text/html' > साथ:

मैं सिनोन FakeXMLHttpRequest साथ सामग्री उपहास करने के लिए कोशिश की है

const src = 'data:text/html;charset=utf-8,<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>'; 
container = mount(<Iframe src={ src } />); 

लेकिन एंजाइम के साथ परीक्षण पर दोनों ही मामलों में:

container = mount(<Iframe src='...' />); 
container.instance().contentWindow // equals 'undefined' 
container.find('iframe').contentWindow // equals 'undefined' 

घटक काम करता है और प्रतिपादन के रूप में प्रस्तुत करता है जब एक वैध src विशेषता प्रदान की जाती है तो सेवा। एंजाइम (या किसी अन्य परीक्षण ढांचे) के साथ प्रतिक्रिया परीक्षण में contentWindow तक पहुंचने का कोई तरीका है?

+0

मुझे इसका परीक्षण करने के लिए एक ही समस्या है, क्या आपको कोई समाधान मिला? –

+5

आपको "काम करने वाले" ब्राउज़र के साथ एंजाइम सेट करना होगा। पता नहीं है कि यह संभव है या नहीं। हालांकि, आप इसका परीक्षण क्यों करना चाहते हैं? IMHO यह परीक्षण व्यर्थ है क्योंकि आप अपने कोड का परीक्षण नहीं करेंगे लेकिन प्रतिक्रिया दें। मुझे लगता है कि आपको केवल परीक्षण करना चाहिए यदि प्रोप "src" सही ढंग से iframe के "src" विशेषता के रूप में सही हो गया है जो एंजाइम के साथ संभव है। – lipp

+0

सामग्री Window वास्तव में शून्य नहीं होगी, जब आप DOMNode() प्राप्त करते हैं और संपत्ति सामग्री जांचते हैं Window। जो आपने चेक किया है वह संपत्ति सामग्री है एंजाइम रैपर पर विन्डो आईफ्रेम स्वयं नहीं – maciejW

उत्तर

-1

यदि आप एक यूनिट टेस्ट लिख रहे हैं (और मुझे लगता है कि यह वही है जो आप कर रहे हैं), तो आपको व्यवहार का परीक्षण करना चाहिए, कार्यान्वयन विवरण नहीं।

अगर मैं इस तरह के घटक के लिए एक परीक्षण मैं उस तरह ख़ाली का उपयोग करेंगे लिखना पड़ा:

  • सकारात्मक परिदृश्य: घटक के साथ एक iframe renders पारित कर दिया src
  • नकारात्मक परिदृश्य: घटक अशक्त renders (पर निर्भर करता है सही और गलत व्यवहार: व्यापार तर्क) अगर कोई src रंगमंच की सामग्री

इस परीक्षा में पारित दोनों संभालती है। अधिक जानकारी के लिए Defensive programming देखें।

यदि हम परीक्षण कार्यान्वयन के बारे में बात कर रहे हैं, तो मैं दोनों परिदृश्यों पर प्रतिपादन परिणाम देखने के लिए Jest और toMatchSnapshot विधि का उपयोग करूंगा।

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