为什么在karma测试期间require()未定义但在运行时是否正常?

时间:2016-12-02 16:51:41

标签: javascript angular typescript jasmine karma-runner

所以我正在研究使用TypeScript编写的Angular 2应用程序,并使用Jasmine(也在TypeScript中)编写了一些单元测试。编译后,所有导入都转换为require()。当我在浏览器中运行我的应用程序时,一切正常,但当我尝试使用karma运行单元测试时,它会显示Uncaught ReferenceError: require is not defined。我已经用谷歌搜索过,人们说它是因为karma在浏览器中运行测试而浏览器并不知道require(),但为什么它在运行时运行正常呢? / p>

1 个答案:

答案 0 :(得分:1)

更新 - 几乎根据更改的假设重写答案。

正如你在其他地方发现的那样,因为业力测试在require()上失败的原因是因为业力在浏览器中运行测试。任何主流浏览器都不支持require()

你问,在这种情况下为什么它在运行时工作?根据评论,答案是你没有在运行时在浏览器中运行。您正在node.js中运行, 支持require()

正如我在回复的原始版本中所提到的,webpack和browserify等工具专门用于允许使用require()的代码在浏览器中运行。它们确实需要一些设置,所以如果你不打算在浏览器中运行,你可能不想搞砸它们。

因此您可能不希望在浏览器中运行测试,因为您的测试环境应该尽可能地匹配您的运行时环境。根据我的经验,业力为您提供的主要功能是能够以自动方式在各种浏览器中运行您的测试,但如果您关心的运行时是节点,那么这对您没有帮助。