Javascript 为什么在karma测试期间require()未定义,但在运行时可以?

Javascript 为什么在karma测试期间require()未定义,但在运行时可以?,javascript,angular,typescript,jasmine,karma-runner,Javascript,Angular,Typescript,Jasmine,Karma Runner,所以我正在开发Angular 2应用程序,它是用TypeScript编写的,并用Jasmine(也用TypeScript)编写了一些单元测试。编译后,所有导入都转换为require()。当我在浏览器中运行我的应用程序时,一切正常,但当我尝试使用karma运行单元测试时,它会显示uncaughtreferenceerror:require未定义。我在谷歌上搜索过,有人说这是因为karma在浏览器中运行测试,而浏览器不知道require() 正如您在其他地方发现的,karma测试在require()

所以我正在开发Angular 2应用程序,它是用TypeScript编写的,并用Jasmine(也用TypeScript)编写了一些单元测试。编译后,所有导入都转换为
require()
。当我在浏览器中运行我的应用程序时,一切正常,但当我尝试使用
karma
运行单元测试时,它会显示
uncaughtreferenceerror:require未定义
。我在谷歌上搜索过,有人说这是因为karma在浏览器中运行测试,而浏览器不知道
require()

正如您在其他地方发现的,karma测试在
require()
上失败的原因是因为karma在浏览器中运行测试<任何主要浏览器都不支持代码>require()

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

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


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

require
在node.js环境中工作。那是你的案子吗?你一点也没提到。这是我启动应用程序的方式。
“启动”:“tsc&&concurrent\”tsc-w\““lite server\”,
(此行在
package.json
)这是测试启动的方式。
“测试”:“tsc&&concurrent\”tsc-w\““karma start karma.conf.js\”,
(也在
package.json
)。所以你是说这个
lite服务器
,对吗?我已经看到了一些关于它的信息,但似乎我必须做大量的配置才能使它工作,而当我从
npm
启动应用程序时(起跑线是
“开始”:“tsc&&并发\“tsc-w \”“lite server\”,
),它工作正常,我不需要做任何事情。