在使用越来越多的JavaScript代码处理更大的Web应用程序时,我们就如何提高代码质量进行了头脑风暴会议。
最初的想法之一是引入单元测试。这将是一个长期目标;但是,这不会解决最常见的回归原因:更改DOM和浏览器特定问题。
单元测试在模拟的无DOM环境中运行,不在页面上。
我正在寻找的是一个可以插入代码的断言框架:
var $div = $("div.fooBarClass");
assertNotEmpty($div);
$div.fooBarAction();
我发现可以执行此操作的断言框架,但它们都可以登录到控制台或DOM中,也可以打开一个愚蠢的弹出窗口。这些都不与(数千个)自动化测试一起工作。 我正在寻找的是一个运行时断言框架,它通过AJAX记录失败的断言!理想情况下,它应该是:
答案 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应用程序。
答案 2 :(得分:0)
似乎没有我正在寻找的类似解决方案。
我要编写自己的一个,当参数求值为false时,重写console.assert以进行ajax调用。
更新:它来了,仍处于开发阶段,https://github.com/gaboom/qassert