测试图形用户界面

时间:2011-08-31 22:28:02

标签: javascript jquery

所以我在jQuery中有一个奇特的GUI,它已经变得相对复杂了。我想为它编写测试,例如使用assert()。但是,似乎编写此类测试很困难,因为GUI不会操纵数据或进行计算:它们只是满足用户需求的表面接口。

那么通常如何为GUI编写测试?

2 个答案:

答案 0 :(得分:2)

假设您的代码相当干净(模块化和松散耦合的功能部分协同工作而不是一些超级功能),首先要做的是选择一个测试框架。我建议使用jasmine,因为它符合我编写测试的方式,但如果您正在寻找更多的xUnit克隆,qunit也是非常好的。

如果你的代码没有拆开(比如99.99%的javascript),我首先会看看如何制作jquery plugins,并尽可能多地提取它们。测试执行大量事情的超级函数是一个可怕的命题,但是当你谈论一个单一事物的模块时,测试变得更容易。

最后,关于如何构建复杂的javascript以及如何测试它,有一点学习曲线。不要放弃!与你相信的一些人相反,javascript现在非常可测试,有非常可靠的库,并且有很多人这样做(我只是花了一整天时间研究复杂的功能,一直在练习TDD,它从来没有感到笨重或者非天然)

祝你好运,如果有些事情不清楚,请随时要求澄清:)

编辑:

通过“拉开”我的意思是转向更模块化的方法而不是巨大的功能。在jQuery中,第一步是插件,这将带你走得很远。如果你正在制作一个javascript“应用程序”,你的大部分逻辑都在前端而后端主要是为了持久,我会看看像Backbone.js这样的东西,这将有助于管理非常高的复杂性,但如果你不需要,那就完全矫枉过正了。

回到提取插件,尝试找到一些包含的功能。我今天写了一个快速插件来记住带分页的表中的复选框状态,其中表的内容以编程方式换出,但如果用户在第一页上检查一个框(但不保存),则转到页面两个,然后回到第一页,他们仍然应该看到那个盒子。

如果该复选框代码在分页代码中是内联的,则会使分页代码WAY更复杂。通过将其拉入插件,它只会使页面代码稍微复杂化(在页面卸载时调用$(table).saveCheckState(),并在新页面加载时调用$(table).loadCheckState())它也会使测试非常简单,我只需要一个带有几个复选框的div来测试复选框代码,而不是需要在已经相当复杂的分页测试中添加更多。

如果您想了解更多关于此类内容的信息,我会犹豫地建议您阅读clean code,不知道您的背景或经验水平。不幸的是它是面向java而不是javascript,但大多数它普遍适用于任何面向对象的语言(javascript 可以),并且可能是本主题的最佳介绍级别书。如果你进行完整的堆栈开发(而不仅仅是前端),至少具有java的工作知识,是一个想要改进他们的技术的初级/中级开发者,它是每个人都应该阅读的书籍之一。如果这些事情不正确,最终可能会让人感到困惑,或者只是对你没什么用处。所以采取一点点的建议:)

答案 1 :(得分:1)

您的答案是在GUI本身 - 用户界面。

GUI最适合人们测试。您应该查看完全专注于用户体验的http://ux.stackexchange.com

我认为这很重要,因为我确定你的GUI已经到了可靠的地步,因为你已经对非图形元素进行了单元测试。通过你自己的测试,你就是这样做的 - 现在,你应该看到其他人如何与之互动,他们如何打破它,以及他们喜欢或不喜欢它。然后你做出改变并重新做一遍。

(好吧,我知道这不是单元测试。但是说真的,那些用于重度测试jQuery东西的选项并不是那么有趣!)