哪个JavaScript测试框架支持无需浏览器进行测试?

8
JavaScript有一些测试框架,如JSUnit或js-test-driver。它们很好用,但是它们在浏览器中运行测试。这很好,特别是为了验证您的Web应用程序在不同的浏览器中运行。但是,在我们的持续集成服务器上没有安装窗口系统(也没有浏览器)。那么有没有一种方法可以在不使用浏览器的情况下运行测试?最好的方法是使用现有的框架,以便开发人员可以在本地浏览器中运行测试,而持续集成系统则在没有浏览器的情况下运行它们。

2
这不是你问题的答案,但我建议在真实的浏览器中测试该项目。最终用户会看到这个,所以应该进行测试。CI安装在哪个操作系统上? - Grzegorz Oledzki
1
CI已安装在Linux上,但没有X。因此,在CI服务器上无法在浏览器中进行测试。开发人员将在浏览器中进行测试,但我也想将测试添加到CI中。 - Mnementh
幽灵浏览器怎么样? - ShrekOverflow
6个回答

1

1

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

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


我不确定你为什么说你无法获得100%的覆盖率。覆盖率意味着代码被执行。你指出的问题(跨浏览器兼容性)是相同的代码在不同的执行环境中可能意味着(并且会)有不同的行为。这意味着,如果你在Firefox中有了100%的覆盖率,它可能不能告诉你关于代码在IE中的行为的所有信息。你可以获得100%的覆盖率,但并不意味着你获得了100%的知识。(即使在所有浏览器中都有100%的覆盖率也不等同于100%的知识,但这是另一个问题。) - Jonas Kölker
这是5年前的事了。当时的Web开发充满了依赖于浏览器的分叉,因为API非常不同。如果你在Firefox、某些命令行运行器等中运行测试,你就无法执行处理另一个浏览器的另一支代码分支中的任何代码。由于你留下了一半的分支未经测试,所以你不能声称代码覆盖率达到100%。现在的情况大不相同了。老实说,我真的想不起来上一次为不同的浏览器做不同的事情是什么时候了。 - geowa4

1

你可能会对HtmlUnit感兴趣,它被多个UI测试框架如WebDriver所使用。


0

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应用程序有用,对于小型脚本可能过度)。

jspec项目已经停止维护,在他们的网站完全消失之前,推荐使用Jasmine代替。https://dev59.com/nFHTa4cB1Zd3GeqPORPd - Brandon Rhodes

0

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

http://webtest.canoo.com/


0

Jasmine 可以在 node.js 中很愉快地运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接