JavaScript单元测试全栈

3
我们正在寻找一种能够在整个应用程序堆栈上执行测试的JavaScript测试框架,包括客户端和服务器端。我们在客户端上使用jQuery、RequireJS和Backbone.js,在服务器端使用Node.js和express。
Node.js旨在通过使用相同的语言(除了其他目标外)来简化Web应用程序的创建,并提供更类似于客户端和服务器端开发的设置。然而,我发现很难进行单元测试,并想出一套在客户端和服务器端都适用的技术。
目前,我们在客户端使用QUnit进行测试,在服务器端使用Expresso和Should.js。它们具有完全不同的接口,这使得测试在客户端和服务器之间共享的代码变得非常困难。例如,考虑一个模块,它执行验证操作,客户端和服务器都需要访问它,并且都需要在所有客户端和服务器上进行单元测试。
本质上,我正在寻找可以使我们以类似于Python和Ruby等语言开发客户端-服务器应用程序的方式开发Web应用程序的圣杯。

我认为目前还没有关于如何同时处理客户端和服务器端模块的共识标准。AMD 用于异步模块声明(在客户端使用),而在 node.js 中使用的是 commonjs 中提出的实现方法。 - badunk
1
@badunk 你说得对,那也是个问题。但是现在可以在服务器端使用RequireJS了。我们还没有尝试过。Node.js使用同步require。这里有一个异步提案叫做require.ensure():http://wiki.commonjs.org/wiki/Modules/Async/。一旦你习惯了RequireJS,它其实很简单,而且作者非常致力于不断改进它。 - Michael Yagudaev
@yaudaev 很好!谢谢你的提示 ;) - badunk
1个回答

1

听起来你正在寻找类似于BusterJS的东西,它具有服务器端和客户端组件。您将为每个部分拥有单独的测试集,但语法将保持一致。您只需在buster.js配置中指定您的环境即可:

env: "browser", // or "node"

目前来看,这绝对是我最喜欢的可用框架之一。


这看起来是一个很棒的工具。我一定要去试试看。 - Moses
谢谢Eric。它看起来有点年轻,但希望到本月底他们会推出一个稳定的1.0版本。我喜欢他们对此的想法:)。只是想确保我们可以信任测试结果,不会返回错误的阳性或崩溃。“你说的‘每个部分都有一个单独的测试集’是什么意思?”为什么? - Michael Yagudaev
@yagudaev 我的意思是,你可以配置一组测试以“浏览器”模式运行,另一组测试则以“节点”模式运行,使用 require 等。就成熟度而言,自从 0.5.1 以来我没有遇到任何问题,并且我正在将其用于生产应用程序。 - Eric Wendelin
现在在网站上观看视频,Buster确实很出色。它确实做到了我所寻找的所有功能:)我会接受这个答案,获得一些更多的替代方案会更好,以保证完整性。 - Michael Yagudaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接