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