【问题标题】:Which testing-framework for Javascript supports Testing without a browser?哪个 Javascript 测试框架支持无浏览器测试?
【发布时间】:2010-11-09 16:48:17
【问题描述】:

对于 Javascript,存在一些测试框架,例如 JSUnit 或 js-test-driver。他们很好,但他们在浏览器中运行测试。这很好,尤其是要验证您的 web 应用程序是否在不同的浏览器中运行。但是在连续集成服务器上没有安装窗口系统(也没有浏览器)。那么有没有办法在不使用浏览器的情况下运行测试呢?最好的办法是使用现有框架之一,以便开发人员可以在其浏览器中本地运行测试,而持续集成系统则无需浏览器即可运行它们。

【问题讨论】:

  • 这不是您问题的答案,但我建议在真正的浏览器中测试它。这是最终用户将看到的,因此应该对其进行测试。 CI 安装在什么操作系统上?
  • CI 安装在 linux 上,但没有 X。因此在 CI 服务器上无法在浏览器中进行测试。在浏览器中,开发人员无论如何都会对其进行测试,但我也想将测试添加到 CI 中。
  • phantomjs 怎么样?

标签: javascript unit-testing testing continuous-integration


【解决方案1】:

您可能对 HtmlUnit 感兴趣,它被多个 UI 测试框架使用,例如 WebDriver

【讨论】:

    【解决方案2】:

    jsTest 可以在命令行运行或作为 Eclipse 插件运行。

    但是,请注意,如果您需要支持多个浏览器,使用这样的工具不会获得 100% 的代码覆盖率。每个浏览器都以不同的方式实现 JavaScript(即:IE)。因此,全面测试 JavaScript 的唯一方法是在您支持的所有浏览器中运行测试。

    【讨论】:

    • 我不知道你为什么说你不能得到 100% 的覆盖率。覆盖意味着代码被执行。您指出的问题(跨浏览器兼容性)是相同的代码在不同的执行环境中可能意味着(并且做)不同的事情。这意味着如果您在 Firefox 中有 100% 的覆盖率,它可能不会告诉您所有您想知道的有关 IE 中代码行为的信息。您无需获得 100% 的知识即可获得 100% 的覆盖率。 (甚至在所有浏览器中 100% 的覆盖率也不等同于 100% 的知识,但这是一个不同的问题。)
    • 这是 5 年前的事了。那时的 Web 开发充满了依赖于浏览器的分支,因为 API 是如此不同。如果您在 Firefox、某些命令行运行程序等中运行测试,您将无法在处理另一个浏览器的另一个分支中执行 任何 代码。由于您有一半的分支未经测试,因此您不能要求 100% 的代码覆盖率。如今,风景已经大不相同了。老实说,我不记得上次我不得不为不同的浏览器做不同的事情。
    【解决方案3】:

    看看以下文章:

    此外,我们有一个运行在几个 Web 浏览器(作为远程控制台运行器)的 jsTestDriver 服务器作为 Jenkins 的资源,因此您可以在 Web 浏览器中使用 CI 进行测试。

    【讨论】:

      【解决方案4】:

      我相信 Canoo WebTest 可以在没有浏览器的情况下运行。它基本上是一个前端测试框架,但也可用于测试 JavaScript:

      http://webtest.canoo.com/

      【讨论】:

        【解决方案5】:

        JSpec 可以在没有浏览器的情况下运行(使用 Rhino)。但也支持在浏览器中运行。

        http://visionmedia.github.com/jspec/

        它还提供了一个很好的规范样式语法:

        describe 'ShoppingCart'   
          describe 'addProduct'   
            it 'should add a product'  
              cart.addProduct('cookie') 
              cart.addProduct('icecream') 
              cart.should.have 2, 'products'   
            end   
          end 
        end
        

        通过在浏览器之外运行所有单元测试,您还可以获得确保将逻辑与 html/表示层分离的好处(对 Web 应用程序很有用,对于小型脚本可能会过度杀伤力)。

        【讨论】:

        【解决方案6】:

        Jasmine 将在 node.js 中非常愉快地运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-26
          • 2023-03-16
          • 2015-11-24
          • 1970-01-01
          • 2012-04-05
          • 2014-02-01
          相关资源
          最近更新 更多