如何在与Browserify捆绑的文件中使用jsdom



我正在尝试为一个函数创建一个单元测试。在测试中,我想使用jsdom包来模拟全局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:Userssnarldevelopmentprojecttest-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作为我的单元测试工具。

在与jsdom开发人员讨论后,我的问题的答案是,在这种情况下,jsdom的工作情况符合预期。支持的两个jsdom用例是:

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

在我的例子中,我试图在Node中的Browserify捆绑包中使用jsdom。我会尝试在浏览器中使用它,看看我会怎么做。初步测试看起来很有希望。

相关内容

  • 没有找到相关文章

最新更新