Ajax驱动的JavaScript运行时断言框架

时间:2011-02-15 12:56:44

标签: javascript unit-testing testing automated-tests assertions

在使用越来越多的JavaScript代码处理更大的Web应用程序时,我们就如何提高代码质量进行了头脑风暴会议。

最初的想法之一是引入单元测试。这将是一个长期目标;但是,这不会解决最常见的回归原因:更改DOM和浏览器特定问题。

单元测试在模拟的无DOM环境中运行,不在页面上。

我正在寻找的是一个可以插入代码的断言框架:

var $div = $("div.fooBarClass");
assertNotEmpty($div);
$div.fooBarAction();

我发现可以执行此操作的断言框架,但它们都可以登录到控制台或DOM中,也可以打开一个愚蠢的弹出窗口。这些都不与(数千个)自动化测试一起工作。 我正在寻找的是一个运行时断言框架,它通过AJAX记录失败的断言!理想情况下,它应该是:

  • 内置了常见的断言。
  • 与JQuery模块,闭包集成。
  • 记录(通过Ajax)断言,文件名,页面,line number,失败原因,环境的一些预先配置的变量(浏览器,发布版本等)。
  • 在出现故障时支持回调。 (如果任何断言框架可以执行此操作,我很乐意写入回调来执行Ajax部分。)
  • 适用于所有浏览器。
  • 从生产版本中排除的微不足道。
  • 维护代码库。

3 个答案:

答案 0 :(得分:2)

我们一直在使用YUI Test Library。它似乎运作得相当好。

有各种不同类型的断言方法

存在相等,相同,真,假,对象类型甚至数组项比较的断言。

允许模拟对象测试DOM对象和其他函数 我们的代码执行了很多AJAX调用,或者需要不需要测试的方法/对象(因为它们在别处测试)。使用Mock对象,我们可以告诉测试期望什么。例如:

var mockXhr = Y.Mock();

//I expect the open() method to be called with the given arguments
Y.Mock.expect(mockXhr, {
    method: "open",
    args: ["get", "/log.php?msg=hi", true]                            
});

适用于所有浏览器

我们在IE,Chrome和Firefox中运行我们的测试,除了测试运行器本身的一些差异之外,它还可以运行!

从生产版本中排除的微不足道

我们将所有测试代码放在一个单独的文件夹中,该文件夹可以访问所有生产代码。从生产中排除测试就像排除文件夹一样简单。

维护代码库

YUI 3在雅虎主页上使用,似乎维护得相当好。

答案 1 :(得分:0)

我知道这不是您要求的内容,但我强烈建议Selenium自动测试Web应用程序。

  • 内置了常见的断言。
  • 它可以测试任何JS框架,因为它驱动代码运行的浏览器。
  • 它具有强大的日志记录功能。
  • 浏览器支持取决于您的操作系统,但支持所有主流浏览器。
  • 没有任何内容可以从生产版本中排除,因为测试是在应用程序外部进行的。
  • 代码库维护得很好,您可以完全控制测试用例。

答案 2 :(得分:0)

似乎没有我正在寻找的类似解决方案。

我要编写自己的一个,当参数求值为false时,重写console.assert以进行ajax调用。

更新:它来了,仍处于开发阶段,https://github.com/gaboom/qassert