一页应用程序的javascript集成测试

use*_*620 5 javascript testing integration selenium phantomjs

我目前正在开发一个单页javascript应用程序,使用服务器端的Sinatra Ruby和客户端的Backbone.js,jQuery,jQuery UI.应用程序的主要目的是允许客户查看/编辑不同类型的项目,每个项目视图是一种或多或少复杂的形式.

为了确保一切正常,我打算做:

  • 使用QUnit进行单一测试
  • 功能/集成测试

在这种情况下,您建议使用哪些框架/工具进行集成测试?我从Selenium开始,但我不太喜欢它.我刚开始看看PhantomJS和CasperJS,他们看起来非常适合浏览,点击链接等基本内容......

你的建议是什么?

Dar*_*ook 1

你没有说你不喜欢 Selenium 的什么,但我猜你对 JavaScript 有信心,所以我的建议是使用CasperJS作为主要工具。它确实可以很好地与单页网络应用程序配合使用,并且附带自己的测试工具。wait使用嵌套子句时,代码有时仍然会有点复杂;通过确保您不会在每个测试中尝试做太多事情来解决这个问题,然后如果仍然很复杂,请进行重构。并且不要忘记测试设计:如果您的选择器非常复杂,请考虑<span id="xxxx">...</span>在它周围添加 a ,这样您的测试就可以直接进行!

您可以将 CasperJS 与PhantomJSSlimerJS一起使用。目前我更喜欢 SlimerJS,因为:

  • PhantomJS 1.x 停留在旧的 WebKit(相当于 Safari 5.1 和 Chrome 13)上,因此测试任何更现代的功能都是令人沮丧的。
  • SlimerJS 可以与 Gecko 引擎一起使用,也可以直接与您安装的 Firefox 版本一起使用。这允许您使用额外的插件、安全证书等配置 Firefox 配置文件。
  • SlimerJS 是用 JavaScript 编写的,因此如果您有需要,更容易破解。

一旦 PhantomJS 2.0 发布(希望在 2013 年底左右),或者如果您的网站不依赖任何最新的 HTML5 API,您可以运行 CasperJS 两次,以获得双重覆盖。(顺便说一句,PhantomJS 自然是无头的;SlimerJS 需要使用Xvfb,仅适用于 Linux 或 Mac。)

Selenium为您提供的额外功能是您可以控制其他浏览器,特别是 IE。(当然,对于 IE,您需要运行 Windows 机器。)Selenium 与 SlimerJS 一样,需要 Xvfb 是无头的(同样,不包括 Windows)。(顺便说一句,受支持的浏览器上的Selenium 文档已经很久没有更新了,但我假设每个浏览器的更高版本至少具有相同的支持。)