我在node js公共目录下的example.js文件中有一个简单的JavaScript函数。
我使用jest进行单元测试。
问题是,如果我在public文件夹中的example.js JavaScript文件中写入以下内容:
module.exports.myFunction = myFunction;
Jest测试文件能够导入它,使用**require()**并执行测试,但是当我运行Web应用程序时,当我服务包含此JavaScript的页面时,浏览器会抱怨:Uncaught ReferenceError:module is not defined
测试节点应用public目录下JavaScript文件的正确方法是什么?
在项目中使用导出和/或导入被报告为无法识别,并导致错误。
这是怎么做到的?
2条答案
按热度按时间oo7oh9g91#
正如注解中提到的,
require(...)
和module.exports
与Common JS Modules相关,NodeJS运行时原生支持它们,但浏览器不支持。所以基本上你需要添加额外的构建配置,让你的模块在两个运行时都能工作。如果你想在CommonJs和浏览器友好包中都有输出,你可以用ES Modules编写所有代码,并使用webpack等构建工具来提供不同格式的输出。
此外,starting from Node 13.2.0-它支持ES模块原生。所以我会坚持ES模块进行持续的开发无论如何。
请检查this short article主要JS模块格式的差异。
cyvaqqii2#
几个月前,我不得不处理这个问题,当时我无法找到一个准确的答案,但我确实明白这个问题是由于env不同,我们正在运行我们的代码和测试我们的代码。额外的工具当时对我来说不是一个解决方案,所以我为自己创造了这个解决方案,这不是最好的,但工作。
字符串
一些要点:
1.双下划线用于指示目的。它是一种命名约定,表明变量是敏感的/内部的,应该小心使用或访问,并防止意外更改或重写。
1.这里使用var增加了这种方法的缺点。你可以摆脱它,但如果你想在测试用例中覆盖好的数量和路径,你必须做出权衡并提出替代方案。
1.我认为您可以通过设计一种方法来设置一种内部命名机制,在这种机制中,您想要为其编写测试用例的每个公共JS文件都有自己独立的_版本,funcs。然而,这将使您编写测试用例变得复杂,其中调用单独文件中的函数。这就是我怀疑我使用var的全部原因以及我们代码的目的。包括在文件的顶部。我认为__funcs不应该被覆盖,我们不必为每个文件声明单独的变量,__funcs将是通用的。
1.如果你想编写独立的测试用例,因此不需要函数,你可以完全消除对var的需求。在这种情况下,你只需在try-catch中的if条件中导出你想测试的东西。
1.我认为你甚至可以通过在测试文件中的globals变量上直接声明你想测试的外部函数来实现funcs的功能,这些外部函数是从你正在测试的函数内部调用的。