Javascript 为什么在karma测试期间require()未定义,但在运行时可以?
所以我正在开发Angular 2应用程序,它是用TypeScript编写的,并用Jasmine(也用TypeScript)编写了一些单元测试。编译后,所有导入都转换为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()
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\”,
),它工作正常,我不需要做任何事情。