2012-08-26 41 views
2

我开始深入研究JavaScript的一些工作,并试图了解如何编写可测试的JS代码。我的背景主要是Java,我很舒服,但我没有JavaScript经验。经过一番阅读后,我打算使用js-test-driver作为我的单元测试框架,但我也乐于接受这里的建议。使用Java,我的方法一直将事情分解成接受某些东西并返回某些东西的小方法...使用JavaScript,我想通过将任何DOM操作和实际逻辑分离为两个独立的函数,我会采取类似的方法。例如:编写可测试的JavaScript代码

function sumValues(valA, valB) { 
return (valA + valB); 
} 

function displayResult(result) { 
document.getElementById('result').innerHTML = 'result'; 
} 

所以,任何业务逻辑都会很容易测试。

我在这里的正确轨道或有没有更好的方式来做事情?任何关于这个主题的推荐阅读是JS特定的?感谢您的任何想法

+1

只是想知道 - 你想要做什么'返回(valA,valB);'?在Javascript中,逗号运算符的工作方式如下:'(statement,return)',所以你基本上计算'valA'然后返回'valB'。 – jeremy

+0

对不起,我用+,错字 – Hoofamon

+1

更新了,我没有这样做的经验,但是,这对我来说是绝对正确的。你可能想要研究的东西实际上可以帮助很多人,特别是来自Java背景的东西会是功能性的范式编程(它听起来像你已经朝这个方向发展),因为JavaScript完全可以成为功能性语言,并且单元测试在功能范例中是一个巨大的驱动因素,因此您可以在功能范例中查找有关单元测试的阅读材料。 –

回答

3

将代码分解为逻辑单元当然仍然适用于JavaScript。至于你如何构建你的代码并组织可重用性,有很多不同的方法可供选择 - 这里列举太多,也是个人偏好问题。从原型继承到伪古典继承;使用框架,如backbone.jsangular.jsrequire.jsyuigoogle closure ...

关于你提到的例子,你可能会开始你的代码分成视图和控制器这是可测试的分别,而只有视图操作DOM。我会查看更多backbone.js

一本真正帮助我开始使用JavaScript测试驱动开发的书(同时也学习JavaScript)是Christian Johansen的Test-Driven JavaScript Development

我正在使用JsTestDriver,它是一款优秀的软件,绝对很好用。但在大规模使用之前,我也会评估其他产品,因为最近JsTestDriver的开发一直很慢。Buster.JS看起来很有希望。另一个有趣的跑步者是Testem它允许您使用不同的测试框架,如MochaJasmine

我也可以推荐Sinon.JS作为嘲笑工具包。

+0

一个构建 - 因为Buster.JS仍处于测试阶段(并且目前不在Windows上工作),现在看起来安全的JsTestDriver路由看起来很安全,因为Buster看起来像它提供了一个JsTestDriver测试的跑步者:http://docs.busterjs.org/en/latest/extensions/buster-jstestdriver/ – quux00

+0

我目前正在试验的另一个测试跑步者是[Testem](https://github.com/airportyh/ testem)。如果您更喜欢BDD语法,并且它似乎支持Windows,那就太好了。尽管没有js-test-driver的兼容性..这里有一个很好的介绍(http://net.tutsplus.com/tutorials/javascript-ajax/make-javascript-testing-fun-with-testem/)。 – meyertee