Javascript &引用;引用错误:未定义文档";

Javascript &引用;引用错误:未定义文档";,javascript,unit-testing,mocha.js,jsdom,Javascript,Unit Testing,Mocha.js,Jsdom,下午好,我开始处理jsdom。为清晰起见,编写了一个非常简单的函数。使用mocha、chai和JSDOM编写了一个测试 mymodule.js中的所有“文档”都被隐藏,因为如果我取消注释它们,将出现错误“ReferenceError:document not defined”。理论上,我已经理解了它的含义。此错误表示节点中没有窗口、文档等。但我不知道如何解决这个问题 如果有任何帮助,我将不胜感激 index.html: tests.js let object=require(“../modu

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

my
module.js
中的所有“文档”都被隐藏,因为如果我取消注释它们,将出现错误
“ReferenceError:document not defined”
。理论上,我已经理解了它的含义。此错误表示节点中没有窗口、文档等。但我不知道如何解决这个问题

如果有任何帮助,我将不胜感激

index.html:

tests.js

let object=require(“../module.js”);
const assert=require(“chai”).assert;
const{JSDOM}=require(“JSDOM”);
描述(“生成值”,函数(){
让dom=null;
before(异步函数(){
dom=新的JSDOM(“”)
});
它('参数5'时应返回25',函数(){
const input=dom.window.document.createElement(“输入”);
input.id=“inputValue”;
const output=dom.window.document.createElement(“输入”);
output.id=“outputValue”;
dom.window.document.body.append(输入);
dom.window.document.body.append(输出);
input.value=5;
预期常数=25;
生成值(输入、输出);
assert.equal(输出值,预期值);
});
});

首先:您不能在模块外部导出或导入
这意味着节点不能在html中使用,除非您像这样向浏览器声明:script tag=>
节点在控制台中运行(像c++一样的命令提示符),html在浏览器中运行…

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

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

记住,你不能在HTML中使用类似节点的JS文件,这就是为什么我们在Node.JS中没有文档和窗口的原因

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

  <script src="./module.js"></script>
</body>
//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,
};
    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);
    });
});