【问题标题】:How to use jsdom in a file which is bundled with Browserify?如何在与 Browserify 捆绑的文件中使用 jsdom?
【发布时间】:2021-07-25 19:41:45
【问题描述】:

我正在尝试为函数创建单元测试。在测试中,我想使用jsdom package 模拟全局document 对象(例如document.getElementById())。我在我的项目中安装了jsdom,并在我的测试文件(test.pageContent.js)中添加了一行:

const jsdom = require('jsdom')

但是从命令行,当我浏览这个文件然后执行它时,它会失败并显示以下输出:

>> node_modules/.bin/browserify test.pageContent.js -t [ babelify ] --outfile test-bundle.js && node test-bundle.js

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
C:\Users\snarl\development\project\test-bundle.js:59075
module.exports = typeof self == 'object' ? self.FormData : window.FormData;

ReferenceError: window is not defined

为什么会发生这种情况,我该如何解决?

我以这种方式浏览器是因为被测函数在一个 ES6 模块中,该模块本身调用其他 ES6 模块。如果我不这样做 Browserify 和 Babelify,就会发生错误。也许这就是我需要调查的内容?


注意事项

  • 在命令行中,如果我使用 Browserify 命令执行测试文件,但没有任何 Babelify 转换,则会出现同样的错误。

  • 在命令行中,如果我完全不使用 Browserify 命令执行测试文件,则完全没有错误。

  • 我使用Tape 作为我的单元测试工具。

【问题讨论】:

    标签: javascript unit-testing browserify jsdom node.js-tape


    【解决方案1】:

    discussing with the jsdom devs 之后,我的问题的答案是,在这种情况下,jsdom 的工作正常。两个受支持的 jsdom 用例是:

    • 在 Node 中使用 jsdom 作为 CommonJS 模块 或
    • 在 Web 浏览器的 Browserify 包中使用 jsdom

    就我而言,我正在尝试在 Node.js 的 Browserify 包中使用 jsdom。我会尝试在浏览器中使用它,看看我是怎么做的。初步测试看起来很有希望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多