如何在javascript中进行单元测试? (正确的方式)

时间:2011-08-22 02:24:15

标签: javascript unit-testing tdd

我一直在尝试不同的js单元测试库,但我仍然不知道这样做的正确方法是什么。

关于这个问题有没有达成共识?

例如,我尝试使用QUnit(jQuery使用的单元测试库)为模态窗口库编写一些测试,但它必须在浏览器中运行,并且它不会隐藏我的效果测试,或其他恼人的事情,如警报(我甚至不知道这是否可能在js)。在服务器端语言中,测试套件生成的任何输出都将被发送到缓冲区并在每次测试后被丢弃。

如果在js单元测试中警告,DOM操作以及那种事情是不可封装的,那么编写测试是否值得用这种语言付出努力?

2 个答案:

答案 0 :(得分:4)

测试前端代码(html,css,javascript)并不是一件容易的事,这主要归功于需要视觉测试的跨浏览器问题,例如。确保元素在所有浏览器中都正确定位。

为了测试您的javascript代码,您需要以“可测试”的方式编写它。我个人发现这篇博文非常有帮助:http://www.adequatelygood.com/2010/7/Writing-Testable-JavaScript

对于实际测试,尝试将QUnit(您已经使用的)与http://funcunit.com/结合起来。 FuncUnit允许您打开一个html页面并在其dom上运行测试。在家里有一个例子说明它是如何完成的。

答案 1 :(得分:1)

如果您对DOM更改和其他效果(警报,提示)感到非常恼火,您可以使用模拟和间谍来确保这些更改是有意的。

请参阅Jasmine包含模拟和间谍的BDD或SinonJS的独立库。

然后你可以写一个这样的测试(使用Sinon):

var mock = sinon.mock(window);
mock.expects("alert").once().withExactArgs("foo");

alert("foo");

mock.verify();