【问题标题】:Unit testing a modular Javascript web-app对模块化 Javascript 网络应用程序进行单元测试
【发布时间】:2011-11-21 12:29:07
【问题描述】:

我正在使用 BackboneJS 和 RequireJS 构建一个 Web 应用程序,并且需要为通过 AJAX 的 UI 交互和数据检索实现某种形式的单元测试。我遇到过QUnitJasmine,但我真的不知道如何将其集成到我的应用中。

如果我正在测试以下内容:

  • 用户登录正常吗?
  • 服务器收到数据正常吗?
  • 单击按钮会触发预期响应吗?
  • 点击事件是否适用于动态加载的 html 内容?
  • 应用是否正确响应哈希/推送状态 URL 的变化?

我想测试必须直接集成到我的应用程序中,以便访问特定的 JS 对象、处理特定于会话的数据并响应推送状态 URL 的变化。

如何将 QUnit 或 Jasmine(或其他建议)集成到我的模块化应用程序中以对此类功能进行单元测试?

【问题讨论】:

    标签: javascript unit-testing testing backbone.js requirejs


    【解决方案1】:

    单元测试真的很简单。

    您制作了一个测试 HTML 页面。您包括 QUnit/NodeUnit/Jasmine/TestLibraryOfChoice

    然后您使用 requireJS 并加载您的 javascript 模块之一,

    您只需测试导出的对象或函数。这意味着测试模块的有效输入并断言输出是正确的。

    您可能需要模拟 ajax 并编写 HTML 模拟

    【讨论】:

    • 好的,我是否必须为我的测试创建一个完整的副本环境,测试不能直接在我的应用程序上运行?所以我提供了虚拟数据和虚拟 html 元素来测试 UI 事件。我的很多逻辑都在 BackboneJS 对象中,这是一个问题吗?
    • Here is an example 有人给 QUnit 和 RequireJS 测试。
    • @pagewil 这取决于您的应用程序的“模块化”程度。如果它真的是模块化的,那么创建一个副本环境是微不足道的,包括 html sn-p 并模拟一些 ajax。请记住,每个模块应该有一个单元测试套件。
    • 问题:1. 我应该执行将虚拟模型持久保存到后端的测试吗?如果是这样,则需要在测试完成后从数据库中删除数据。 2. 一些测试需要cookie/session数据通过后端的安全检查,应该如何处理? 3.所有测试模块都应该放在'/tests'目录中吗?
    • @pagewil 我个人使用实时数据库和实时系统进行测试。我所做的每个单元测试都会在数据库上创建真实数据并再次删除该真实数据。这可能是一种不好的做法,但我就是这样做的。
    【解决方案2】:

    Dojo Objective Harness (DOH) 是一个非常好的单元测试框架,它与浏览器无关并且支持测试异步函数,参见here for a walkthrough guide.

    但是,从您的测试用例看来,您想要的更像是集成测试? 如果是这样Selenium 是一个很好的浏览器自动化工具。

    至关重要的是,这些工具都不会要求您修改代码(除非您发现错误:))

    【讨论】:

      【解决方案3】:

      如果您想查看使用 QUnit 对基于 requireJS 的模块进行单元测试的示例,请在 http://boilerplatejs.org 下载 javascript 参考架构。

      免责声明:我是它的主要作者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 2011-03-25
        • 1970-01-01
        相关资源
        最近更新 更多