如何在与 Browserify 捆绑在一起的文件中使用 jsdom?
How to use jsdom in a file which is bundled with Browserify?
我正在尝试为函数创建单元测试。在测试中,我想模拟全局 document
对象(例如 document.getElementById()
) using the jsdom package。我在我的项目中安装了 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 作为我的单元测试工具。
在 discussing with the jsdom devs 之后,我的问题的答案是,在这种情况下,jsdom 一切正常。两个受支持的 jsdom 用例是:
- 在 Node 中使用 jsdom 作为 CommonJS 模块
或者
- 在网络浏览器的 Browserify 包中使用 jsdom
就我而言,我尝试在 Node.js 的 Browserify 包中使用 jsdom。我将尝试在浏览器中使用它,看看效果如何。初步测试看起来很有希望。
我正在尝试为函数创建单元测试。在测试中,我想模拟全局 document
对象(例如 document.getElementById()
) using the jsdom package。我在我的项目中安装了 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 作为我的单元测试工具。
在 discussing with the jsdom devs 之后,我的问题的答案是,在这种情况下,jsdom 一切正常。两个受支持的 jsdom 用例是:
- 在 Node 中使用 jsdom 作为 CommonJS 模块 或者
- 在网络浏览器的 Browserify 包中使用 jsdom
就我而言,我尝试在 Node.js 的 Browserify 包中使用 jsdom。我将尝试在浏览器中使用它,看看效果如何。初步测试看起来很有希望。