我开始使用Mocha和Chai为我的JavaScript编写单元测试,并通过Node执行测试。如果我可以通过node运行所有测试,而不需要真正的浏览器/ html页面,则我更喜欢它。
.js文件是作为RequireJs模块编写的,我想我掌握了如何编写一些逻辑单元测试(即那些不操纵DOM的测试)的方法。
我现在坚持的一点是,如何测试执行DOM操作的功能?
我会被迫更改功能签名以传递将要作为参数操作的所有元素吗?(这可能不是一件坏事-但是如果我处理许多元素,可能会导致传递很多参数)?
另外,如何在不影响服务器的情况下测试AJAX响应?我想做的是模拟AJAX响应并测试我的代码如何处理它。例如,伪造404响应并查看会发生什么情况。
我听说过SinonJ,但还不熟悉。
如果我使用JQuery进行AJAX调用,是否应该将$ .ajax存根以得到所需的结果?
基于以上所述,在js测试方面我会缺少什么吗?我上面已经描述了什么明显的,没有意义的东西,或者似乎是我以错误的方式来做吗?
我已经看过PhantomJs,但是不太确定它的适合位置,它似乎最适合在运行的环境中进行测试(我想更接近于集成测试)-这是正确的假设吗?
关于DOM操作的测试,您可以使用一个名为的模块jsdom
,该模块是用JavaScript实现的无头浏览器。因此,您获得了DOM,但是您的测试仍在Node.js中运行,而且速度很快。缺点是您无法测试浏览器的特殊性,因为jsdom
它与其他浏览器无关。
关于AJAX调用的测试,sinon.js
确实非常有帮助。您可以存入$ .ajax,但是如果您想进行更深入的测试,还可以在浏览器中存入XMLHttpRequest(或者实际上是在jsdom中)。我写了一篇关于此的博客文章:http : //nicolerauch.de/2015/12/20/lightweight-stubbing-of-ajax-requests-in-javascript.html(底部有一个指向Github的链接使用工作代码进行回购,并使用mocha和node.js和jsdom进行测试)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句