【问题标题】:Test javascript in node's public folder using jest使用 jest 测试节点公用文件夹中的 javascript
【发布时间】:2021-10-10 08:30:28
【问题描述】:

我在 node js 公共目录中的 example.js 文件中有一个简单的 javascript 函数。
我正在使用 jest 进行单元测试。
问题是如果我在公共文件夹的 example.js javascript 文件中编写以下内容:
module.exports.myFunction = myFunction;
Jest 测试文件能够使用 require() 导入它并执行测试,但是当我运行 Web 应用程序时,当我为包含此 javascript 的页面提供服务时浏览器会抱怨: 未捕获的 ReferenceError:未定义模块

在node应用的public目录下测试javascript文件的正确方法是什么?
在项目中使用导出和/或导入被报告为无法识别并导致错误。

这是怎么做到的?

【问题讨论】:

  • 您正在尝试测试客户端代码?并且客户端代码没有通过 Webpack/Babel/etc 运行?
  • 没错。谢谢您的答复。有没有我不知道的最佳做法?

标签: javascript jestjs public


【解决方案1】:

正如 cmets 中提到的 require(...)module.exportsCommon JS Modules 相关,NodeJS 运行时原生支持,但浏览器不支持。所以基本上你需要添加额外的构建配置才能让你的模块在两个运行时都工作。

如果您想在 CommonJs 和浏览器友好的包中都有输出 - 您可以在 ES Modules 中编写所有代码,并使用 webpack 等构建工具提供不同格式的输出。

另外,starting from Node 13.2.0 - 它原生支持 ES 模块。所以无论如何我都会坚持使用 ES 模块进行持续开发。

还请查看this short article 了解主要 JS 模块格式差异。

【讨论】:

  • 非常感谢您。我确实在研究 webpack。我目前使用的是节点 15.12.0,所以也会研究 ES 模块的原生支持。
  • 感谢您的意见,我已更新并合并了 webpack 5 和 babel。但是,我注意到 babel 没有在我的设置中转换箭头函数 :(
  • Babel 配置绝对是一个单独的问题。您可能会错过配置中的一些预设。请提出另一个问题,详细说明您针对哪些浏览器并提供当前配置。您还可以将此答案标记为已接受,它可以使模块的使用更加清晰。
  • 同意 babel 和 webpack 配置是另一个问题。我已经预设了 @babel/env 加载和插件以及插件: [ "@babel/plugin-transform-arrow-functions", {spec: true} ] 将尝试找出问题所在。如果我的努力没有结果,我将把它作为一个单独的问题发布。再次感谢。非常感谢您的意见。
猜你喜欢
  • 2014-09-28
  • 2020-11-21
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2019-04-09
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多