什么是您使用的JavaScriptunit testing和嘲笑框架?
我的主要JavaScript框架是jQuery,所以我希望我的unit testing和嘲笑框架兼容。 我宁愿不必引入另一个JavaScript框架。
我目前正在使用QUnit进行unit testing,并且使用Jack进行模拟 ,但对于JavaScript的整个unit testing来说,我还是个新手。
其他人有更好的工具来build议吗? 什么为你工作?
QUnit
jQUnit
用QUnit和jQUnit编写JStesting
QUnit是jQuery JavaScript框架的unit testing框架。 testing框架本身使用jQuery库,但是可以为任何JavaScript编写testing,并且不要求代码使用jQuery。 JQUnit是QUnit的一个修改版本,它增加了xUnit框架中更典型的setup,teardown和assert函数,并将所有东西封装在一个全局variables中。
testrunner页面的可视化界面非常好,可以深入查看每个testing方法中的每个断言。 编写testing相当简单,您可以直接在testRunner页面上运行testing代码[8]。 这允许简单和可见的DOMtesting。
QUnit:麻省理工学院或GPL(select)jQUnit:麻省理工学院许可证
优点
– asynchronous支持
– 适用于DOMtesting
– testing总是按照它们添加到套件的顺序依次运行
– 使用萤火虫在testing页上进行debugging
– 如果使用JQUnit,则语法与JUnit类似,但如果使用QUnit则简单易学
缺点
– 自动化将很难实现
我认为杰克是写这篇文章的时候JavaScript最好的嘲弄框架。 主要的原因是对于JavaScript这样的强types语言来说,什么是正确的。
许多JavaScript嘲笑框架受Java模拟框架(例如优秀的JsMockito)的启发。 但是这些问题是他们需要dependency injection,因为这是在Java中使用模拟的唯一合理的方式。 但是在JavaScript中,有许多方法可以使用模拟,而且你不会被迫在任何地方使用dependency injection。
例如,使用JsMockito,你必须做模拟,然后将这些模拟传递给你的软件testing(SUT)。 SUT必须直接调用模拟。 因此,你不得不把SUT编码为一个构造函数或函数,它将所有的依赖作为参数。 (有时候,这是一个很好的实现方法,但不是每一种情况都是如此,如果你的模拟框架的devise迫使你的实现方法的话,那么尾巴是摇摆不定的)。
在JavaScript中,“劫持”任何function都非常容易。 因此,有很多方法可以构build一些东西,以便可以模拟其中的一部分,而不必将其依赖关系注入其中。 例如,Jack可以让你嘲笑任何函数,无论是公共还是本地对象。 从那里你可以窥探它,存根或expression期望。 关键在于: 一旦你嘲笑了一个函数,任何对原函数的调用都会被引导到你的模拟 。 换句话说,即使调用了原始的,非模拟的函数,你的模拟仍然会被使用。 因此,你不是被迫注入依赖关系,尽pipe在那些需要它的情况下你肯定可以这样做。
JavaScript是与Java(和C#等)不同的语言。它允许不同的实现方式。 dependency injection在JavaScript工具箱中仍然是一个有价值的工具,但它不再是城里唯一的游戏。 你的嘲笑框架需要知道和尊重这个事实。 杰克和其他一些人做,但杰克和其他人做的杰克似乎是最成熟和function丰富的。
我不知道为什么没有人提到JsTestDriver ! 它必须是唯一的JStesting工具之一,如果你已经使用了其他语言的unit testing工具,它们的工作方式就像你期望的一样。
运行testing可以在不接触浏览器的情况下完成,您可以将其与IDE集成,也可以将其与集成系统集成在一起…噢,速度很快,可以同时在多个浏览器中运行testing。
您也可以使用其他testing框架,如YUITest,使它更好。
YUItesting
用YUItesting的TDD
YUI Test是雅虎用户界面库的testing框架。 雅虎使用它来testing自己的库,并具有类似于jUnit的语法。
和jsUnit一样,YUI Test自带日志控制台,除了每个testing的结果外,还可以输出信息,警告和错误。
YUI还提供了以JSON或XML格式发送结果报告的function。
YUItesting是BSD许可的。
优点
– 真的很好的文档
– 积极的社区
– 定期发布
– 语法类似于jUnit(testing套件,断言和设置/拆卸)
– asynchronous支持
– 适用于DOMtesting
– testing总是按照它们添加到套件的顺序依次运行
缺点
– 自动化不是微不足道的实现,但比其他框架更难
这是对Javascript可用框架的一个很好的回顾:
http://testdrivenwebsites.com/2010/05/06/java-script-mock-frameworks-comparison
我们一直在使用jsspec jsspec 。 它非常好,如果你喜欢rspec和BDD。 刚刚看到Justin Gehtland的一篇关于“无头”的文章 。
在JavaScript中嘲笑看看qMock ,一个同事的框架,我写了补充我们使用QUnit。 尽pipe后者对于unit testing非常有用,但它不允许进行非常有效的asynchronous/业务逻辑testing。 我们并没有将任何发行版标记为稳定,但是那里有一些体面的文档,如果你签出svn,你会看到qmock本身就有unit testing,这是相当明显的。
哦,并且作为构build的一部分进行自动化testing,我们使用一个简单的selenium脚本浏览我们的testing套件(每个JS文件一个testing页面),并“听取”通过或失败的CSS类(由QUnit添加)。 这对于IE / FF2 AFAIK也是没有任何意义的
对于Mozilla开发,我爱上了基于MozUnit的UXU ,但仍然活跃。 具有很好的function,如模拟服务器或睡眠/方法。
我使用螺杆unit testing框架,并且编写了我自己的叫做jsMocha的模拟库 ,它已经在我工作了6个多月的公司中大量使用。
我知道你在寻求JQuery兼容的框架,但是我想把script.aculo.usjoin到组合中来完成。 他们有一个unit testing套件,不错。
CrossCheck看起来非常强大,但我们目前还没有将其纳入到构build过程中。 它具有无浏览器的优点,因此应该在自动构build和testing场景中运行良好。
您可以尝试一年前拥有JQuery兼容版本的 HtmlUnit 。
HtmlUnit的优点是它不会驱动浏览器,所以它是快速的。
缺点是,它不是驾驶浏览器,所以有一些JS的东西是行不通的。 但抵消他们可以运行JQuerytesting,所以JS支持可能足够满足您的需要。
JsUnit可以通过浏览器,通过Eclipse插件运行,也可以通过ANT任务自动运行。 你用一堆testing函数创build一个HTML页面,这个testing函数必须用前缀“test”来命名,包括你正在testing的JS文件。 当一个函数中的任何断言失败时,整个函数失败并停止执行。 没有保证这些testing运行的顺序。 您可以创buildsetup()
和teardown()
函数。
许可证:GPL,GLPL,MPL
优点
- 自动化相对容易实施
- 很多function
- 语法与JUnit类似
缺点
- 因为它在iFrame中运行testing,所以对于DOMtesting并不好。
- 不保证testing将按照他们写的顺序运行。
- 在testrunner页面上不能使用Firebug。 需要使用实际的testing代码打开另一个选项卡。