“ ReferenceError:未定义文档”

时间:2020-01-08 15:36:32

标签: javascript unit-testing mocha jsdom

下午好,我开始处理jsdom。为了清晰起见,编写了一个非常简单的功能。使用mocha,chai和JSDOM编写了一个测试。

module.js中的所有“文档”均被隐藏,原因是如果我取消注释,则会出现错误"ReferenceError: document is not defined"。从理论上讲,我已经理解了它的含义。此错误意味着节点中没有窗口,文档等。但是我不知道如何解决这个问题。

我将不胜感激。

enter image description here

enter image description here

index.html:

<body>
  <input type="text" id="inputValue">
  <input type="text" id="outputValue">
  <button id="getResult">getResult</button>

  <script src="./module.js"></script>
</body>

module.js

//var input = document.getElementById("inputValue");
//var output = document.getElementById("outputValue");
//var button = document.getElementById("getResult").addEventListener('click', generateValue);

function generateValue(input, output){
    output.value = input.value * 5;
}

module.exports = {
    generateValue,
};

tests.js

    let object = require("../module.js");
const assert = require("chai").assert;
const { JSDOM } = require("jsdom");

describe("generateValue", function() {
    let dom = null;
    before(async function() {
        dom = new JSDOM('<!doctype html><html><head></head><body></body></html>')
    });

    it('Should return 25 when parameter 5', function() {
        const input = dom.window.document.createElement("input");
        input.id = "inputValue";
        const output = dom.window.document.createElement("input");
        output.id = "outputValue";
        dom.window.document.body.append(input);
        dom.window.document.body.append(output);
        input.value = 5;
        const expected = 25;

        object.generateValue(input, output);
        assert.equal(output.value, expected);
    });
});

1 个答案:

答案 0 :(得分:0)

首先:您不能在模块外部导出或导入
这意味着除非您向浏览器声明如下,否则该节点无法在html中使用:script tag =>
节点在控制台(命令提示符,如c ++)中运行,而html在浏览器中运行...

第二:
为什么要生成值并导出,可以在test.js文件中执行此操作
如果要执行此操作,则必须将node用作PHP之类的服务器。(稍有不同)

顺便说一下,您可以使用另一个js文件计算生成值,然后显示该值(或您想要的每件事),并使用异步函数获取值并执行某些操作..... 但是您必须在其中添加另一个脚本标签html文件

请记住,您不能在HTML中使用像JS文件这样的节点,这就是为什么我们在node.js中没有文档和窗口的原因