2017-09-05 55 views
1

所以我有一個特殊的問題創建HTML元素,在我的反應組分i中使用這樣的命令:的JavaScript測試

document.getElementById('modalsContainer').appendChild(recognitionProfileZoom); 
document.getElementById('modalsContainer').appendChild(categoryZoom); 

和:

document.getElementById('cddoccategoryzoom').value; 

但是通過ID中指定的這些元素不存在於我的組件中。
如何在測試中創建這些對象?

下面的代碼將使用這些元素,而是因爲他們不存在,則失敗(的hideModal功能利用從之前的document.append)

describe("CaptureProfileModal functions tests", function() { 

it('Should hide the modal', function() { 
    var wrapper, instance; 

    wrapper = mount(
     <CaptureProfileModal 
      gridAction={1} 
      captureSettingCode={15} 
      fields={mockedFields}/> 
    ); 

    wrapper.setState({ 
     showModal: true 
    }); 

    instance = wrapper.component.getInstance(); 
    instance.hideModal(); 
}); 
+0

對於初學者來說,所有ID都是小寫字母,如果您希望它可以與所有瀏覽器一起使用,則不應在ID中使用大寫字母。也可以使用獲取元素並檢查getElementByID的返回值,但不要認爲它會成功。 – SPlatten

+1

HTML元素ID [區分大小寫](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById)。自IE8以來的所有瀏覽器都支持'getElementById'中的區分大小寫的字符串。 –

+0

爲什麼你不只是嘲笑他們? –

回答

0

創建在酶測試DOM元素:

所以,球員,創造DOM在測試元素,它實際上很簡單,你只需鍵入它,你會在香草的javascript,隨着全球關鍵字:

it('Should hide the modal', function() { 
     var wrapper, instance; 
     var modalsContainer = global.document.createElement('div'); 
     var recognitionProfileZoom = global.document.createElement('div'); 
     var categoryZoom = global.document.createElement('div'); 

     modalsContainer.id = 'modalsContainer'; 
     recognitionProfileZoom.id = 'recognitionProfileZoom'; 
     categoryZoom.id = 'categoryZoom'; 
     global.document.body.appendChild(modalsContainer); 
     global.document.body.appendChild(recognitionProfileZoom); 
     global.document.body.appendChild(categoryZoom); 

完成此操作後,您可以期待值,並正常使用DOM元素。