我只是想在 Javascript 和 RequireJS 中进行单元测试。我正在构建一个网络应用程序,显然只想在开发而不是生产构建中运行测试。
问题:
- 您只是在需要时进行测试,还是在开发时在每次页面加载时运行 JS 测试?
- 如果测试只是按需进行,那么如何触发测试运行?查询字符串(例如?testing=true)或类似的东西?
我只需要了解人们如何在开发中进行测试。我在前端使用 BackboneJS、RequireJS 和 jQuery,在后端使用 NodeJS/ExpressJS 服务器。
我只是想在 Javascript 和 RequireJS 中进行单元测试。我正在构建一个网络应用程序,显然只想在开发而不是生产构建中运行测试。
问题:
我只需要了解人们如何在开发中进行测试。我在前端使用 BackboneJS、RequireJS 和 jQuery,在后端使用 NodeJS/ExpressJS 服务器。
对于工作中的 Backbone 项目,我们有一个 maven 构建过程,它通过 jsTestDriver 运行我们的自动化 javascript 测试,我们使用 Sonar 读取结果。我通常手动运行测试(使用'mvn test'),但例如每次保存文件时我都可以轻松地告诉maven。我写了一篇文章,展示了如何将 QUnit、Requirejs 和代码覆盖与独立于 Maven 的 JSTD 集成:js-test-driver+qunit+coverage+requirejs。它还包含指向 QUnitAdapter 的链接,该链接比 jsTestDriver 站点上的更新和开发得多。当我设法写下我如何让 jsTestDriver 与 Maven 和 Sonar 一起工作时,我会更新这篇文章。希望能帮助到你。
Grunt 是一个流行的 JS 构建工具。有一种叫做 grunt-watch 的东西可以监控某些文件的变化,并相应地执行任务。您可以在每次保存时轻松地运行单元测试。
通常端到端测试需要更长的时间,我们为此使用 CI。我看过一个关于 Meteor TDD 的演示文稿,它在每次保存后都会进行端到端测试。
有许多端到端的测试框架,它们可以使用像 grunt 这样的构建工具在像 phantom js 这样的无头浏览器中运行。一些框架打开一个实际的浏览器来运行测试,但通过命令行运行并使用 XML 报告结果。
如果您对组件进行了足够的分解,则测试的范围可能足够小,可以在每次保存时运行。
对于一些核心代码,我在构建服务器上使用 JsUnit + Rhino。对于更复杂的位(通常是接口),我使用 selenium(它也在构建服务器上运行)。我不对页面加载进行任何测试,我只使用未压缩的脚本版本。我没有任何集成测试的解决方案。