创建一个假的DOM以在JavaScript测试套件中进行测试

时间:2015-02-25 19:21:18

标签: javascript html unit-testing dom

问题

  
      
  • TypeError:无法设置属性< innerHTML'为null
  •   

问题

我正在使用Jest来处理我的JavaScript单元测试,它带来了嵌入式jsdom,它应该处理与DOM相关的主题。

这是我的测试片段:     jest.dontMock(' fs');

var markup = require ('fs')
  .readFileSync(__dirname + '/markup/index.html')
  .toString();

describe ('my app', function () {
  it ('should initialize adding <h1> to the DOM', function () {
    document.documentElement.innerHtml = markup;

    app.start();

    expect(app.DOM).toEqual('<h1>Hello world!</h1>');
  });
});

.start()的实施位于:

document.querySelector('h1').innerHTML = 'Hello world';

在浏览器中运行库时,效果很好。但是在通过CLI进行测试时,它并没有。

诊断

基本上,我尝试了以下内容:

 it ('should initialize adding <h1> to the DOM', function () {
    document.documentElement.innerHtml = markup;

    console.log(document.querySelector('h1'));

    // [...]
  });

console.log()输出&#39; null&#39; - 似乎我创建的标记没有被添加到&#34; DOM&#34;那是jsdom创造的。

这是/markup/index.html的内容,也与markup变量相同:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Linguisticjs Markup Test</title>
</head>
<body>
  <h1>Bonjour le monde !</h1>
  <h3>Comment ça va ?</h3>
</body>
</html>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是一个错字。这是错的:

document.documentElement.innerHtml

应该是innerHTML。你这样做的方法是创建一个名为innerHtml的字段,但没有效果来创建DOM节点。