ES6 jsdom无法读取null的属性“ innerHTML”

时间:2018-12-17 23:51:46

标签: javascript unit-testing mocha es6-modules jsdom

我正在尝试使用Mocha设置单元测试,同时使用jsDOM来模拟ES6的virtualDom;但是我最近的

总是出错

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'innerHTML' of null

这是我的main.js设置

    const url = 'https://localhost/demo.json';
    const source = document.getElementById('row-template').innerHTML;
    const contentLoop = document.getElementById('feedback-loop');
    const searchForm = document.getElementById('searchForm');
    const searchInput = document.getElementById('searchInput');
    const ratingEntries = document.querySelectorAll('.ratings__button');
    const lengthContainer = document.querySelector('.length');

和我的测试文件,仅包含这个main.js文件

使用.innerHTML方法的每一行都会发生错误

const main = require('../src/js/main');

在使用此dom.js文件https://gist.github.com/ChidinmaKO/cd5a35624285c07e61a5373c5c8ff3ea

运行摩卡咖啡时

请帮助。我想念什么?

1 个答案:

答案 0 :(得分:2)

您有这行:

document.getElementById('row-template').innerHTML;

此错误:

  

无法读取null的属性“ innerHTML”

“无法读取属性innerHTML”是指.innerHTML调用。就是说,属性访问的左侧部分document.getElementById('row-template')null。之所以为null,是因为document.getElementById('row-template')在文档中找不到具有该ID的HTML元素。

确保ID实际上在DOM中存在。一个非常常见的错误是在存在整个HTML文档之前就在脚本块中运行代码(例如,如果您的脚本元素位于HTML的<head/>中)。将代码放在正文的底部将确保在代码运行之前,其余HTML实际上已经存在。

如果这是在测试中发生的,则必须确保代码的预期DOM结构已由测试的设置安排。