为 javascript 测试创建 HTML 元素

IT技术 javascript reactjs testing enzyme
2021-04-26 00:28:03

所以我有一个特殊的问题,在我的 react 组件中,我使用了如下命令:

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();
});
1个回答

在酶测试中创建 DOM 元素:

所以伙计们,要在您的测试中创建DOM元素,实际上非常简单,您可以像在 vanilla javascript 中一样输入它,使用 global 关键字:

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 元素。