在javascript中介绍单元测试

时间:2009-09-23 10:19:42

标签: javascript unit-testing

我从未在javascript中进行任何测试。我知道我知道。但原因是我之前从未构建过大型的javascript应用程序,所以我从未见过任何进入测试的理由。

但是现在我觉得是时候开始破解了。

唯一的问题是,无论我走到哪里,每个测试框架似乎都依赖于人们已经知道如何使用javascript进行测试的事实,他们只关注为什么他们的测试框架比下。

我想要的是用javascript进行测试的非常基本的介绍。什么时候需要?你应该测试什么?应该如何设置测试?你多久测试一次?你知道,只是非常非常基本的东西。

因此,任何文本或视频的链接都将受到高度赞赏(:

感谢。

编辑:为了弄清楚:我正在寻找的是测试的介绍,而不是特定的框架。因为现在,我甚至不知道为什么要测试......

如果有关于这个主题的书籍,那就更好了。

第二次编辑:我在Nicholas Zakas on Yahoo! Theatre找到了一段非常好的视频,在那里他首先解释了javascript的TDD练习,然后解释了如何使用YUI测试来实现这些目标。

5 个答案:

答案 0 :(得分:3)

javascript中的单元测试虽然很棒,但可能不是单元测试在大多数其他语言中的美味。

这样做的主要原因是javascript依赖于它运行的浏览器 - 加上异步行为是如此无处不在,开始使用它可能有点令人生畏。

以下是一些可能有助于您入门的事情,只是不要指望难以接受的入口,也不会让其他语言获得直接收益。

John Resig对javascript中的测试限制做了excellent writeup,这可能是一个不错的起点。

这是开始在fireunit中为javascript BDD编写测试的video

答案 1 :(得分:3)

通常,单元测试允许您构建一组小测试,以验证代码的细粒度,特别是边缘情况。这在Javascript中特别有用,其中您的应用程序需要在不同的浏览器平台上以相同的方式运行。

创建一系列此类测试可以确保您今天所做的更改不会破坏您昨天(或一个月前)编写的代码。

例如,您可能有一部分应用程序遍历文档中的所有DOM节点,以查找并绑定到它关注的节点。您可以通过使用jquery选择器来决定优化它。如果您有一个测试,可以正确找到所有可能的节点,您可以在任何目标浏览器上快速查看您刚刚做出的更改是否破坏了任何内容。

您还可以使用各种框架“伪造”与服务器的XmlHttpRequest交互 - 这使您可以验证您的客户端代码是否可以对从后端返回的各种结果和错误做出正确反应。

基本上,与其他语言一样,JS中的单元测试允许您通过这些更改自动回答“我刚刚破坏了什么”的问题吗?

答案 2 :(得分:2)

我发现在XHR(AJAX)调用中经常需要进行Javascript单元测试。您编写单元测试以断言响应是您期望的。服务器和客户端上的测试驱动开发可以帮助您解决问题 - 是否发送了足够的参数?路上有什么东西被破坏了吗?序列化器的行为是否符合我的预期?测试的设置与任何其他环境一样 - 减少并简化它以隔离问题。

对于非常基本的东西,我建议您开始使用Firebug进行调试(设置断点等),然后继续使用Selenium进行单元测试。

答案 3 :(得分:1)

我会推荐JSpec。这是一个Behavior Driven Development框架,还附带了截屏视频。

答案 4 :(得分:0)

JsUnit(不再维护)

  

JsUnit是一个单元测试框架   客户端(浏览器内)JavaScript。   它本质上是JUnit的一个端口   JavaScript的。还包括一个   自动执行的平台   测试多个浏览器和   多台机器运行不同   操作系统。