【问题标题】:'ReferenceError: document is not defined' error'ReferenceError:文档未定义'错误
【发布时间】:2018-08-02 20:32:50
【问题描述】:

我正在尝试将 Mocha 集成到我的应用程序中,但收到 document is not defined 错误。我也尝试过集成 JSDOM 来解决这个问题,但没有运气。也许我的实现是错误的。提前致谢!

注意:我正在本地测试它,但稍后将在 Amazon EC2 上托管它。当在服务器上实时托管时,文档错误会自行消失吗?

test.js

var test = require('../index.js');
var assert = require('assert');
var jsdom = require('mocha-jsdom');

global.document = jsdom();

describe('Mutliply', function() {
  jsdom();
  it('should equal 9 when multiply is called', function() {
    assert.equal(9, test.multiply());
  });
});

index.js

'use strict';

let test = {};

let movieList = document.getElementById('movie-list');
//bunch of code

test.multiply = function() {
  return 3*3;
}

module.exports = test;

【问题讨论】:

    标签: javascript node.js mocha.js jsdom


    【解决方案1】:

    问题是在声明文档之前,您正在 requireing 使用在全局范围内使用 document 的代码。

    var assert = require('assert');
    var jsdom = require('mocha-jsdom');
    
    global.document = jsdom();
    
    var test = require('../index.js');
    
    describe('Mutliply', function() { ...
    

    应该可以,甚至

    var assert = require('assert');
    var jsdom = require('mocha-jsdom');
    
    global.document = jsdom();
    
    describe('Mutliply', function() {
      var test = require('../index.js');  // late import
      it('should equal 9 when multiply is called', function() {
        assert.equal(9, test.multiply());
      });
    });
    

    【讨论】:

    • 稍后导入它确实解决了文档未定义的问题,但现在,我收到了TypeError: Cannot read property 'getElementById' of undefined。听起来文档仍未定义。
    • 好吧,mocha-jsdom 的自述文件说它已被弃用 - 也许试试链接在那里的 github.com/rstacruz/jsdom-global
    【解决方案2】:

    您可以尝试使用JSDom 为 Node 添加 Dom 支持:

    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    global.document = new JSDOM(html).window.document;
    

    【讨论】:

      猜你喜欢
      • 2022-10-17
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多