如何使用单元测试和某种IDE在Javascript中进行开发

How do you develop in Javascript using unit tests and having some sort of IDE

本文关键字:Javascript 开发 IDE 单元测试 何使用      更新时间:2023-09-26

我不喜欢保存文件、切换到web浏览器、刷新并查看它是否有效。

这就是我问的原因。

当我必须接触PHP时,我使用Eclipse,我可以创建单元测试并确保它正常工作,我不写一点,先写一点再测试。所以我希望以同样的方式"开发"Javascript,编写一个块,确保它能工作,但我不确定如何测试由按钮触发的操作。

我搜索了"Javascript开发"和其他术语,我得到了预期的废话。。。你好,世界上的Javascript狙击真的。

有人能给我指正确的方向吗?我目前使用Eclipse(Eclipse CDT、PyDev、Eclipse PHP等),并且我可以调试。我可以不进行Javascript的逐步调试,但我真的很喜欢单元测试。

我遇到的另一个问题是很难找出问题所在,即使是PHP也可以给你一个调用跟踪,我一直被Firefox在网络开发人员设置中令人讨厌的访问错误所困扰。

肯定有更好的方法,但我很难找到。

Firefox确实有一个名为firebug的插件。如果这不是你所说的烦人的Firefox工具,你应该看看它是否会对你有所帮助。

第一步;静态分析:http://www.jslint.com/

第二步;测试:JavaScript 在Eclipse中的自动测试

第三步:JavaScript The Good Parts

我建议您使用chrome开发者模式,或者您可以使用firebug作为firefox。

从这里抓取firebug

如果你想要单元测试,你说的是QUnit、Jasmine或Mocha/Chai。(我用的是摩卡/柴)。棘手的部分是在没有浏览器的情况下进行测试。你的第一个选择是使用CasperJs和PhantomJs。这些是无头浏览器,无需在实时浏览器中即可运行JavaScript,因此所有测试都可以从命令行自动进行。如果你还添加了Karma,你可以在指定的任意多个浏览器中以无头的方式进行测试。

如果您使用的是PHP,您可以从Packagist存储库安装Codeception。在集成测试的模块下,添加Selenium。然后,它会询问您希望它启动什么浏览器。这是使用PHP和JavaScript进行测试的最好方法(如果您使用PhpBrowser,另一个默认的包,它会快得多,但它不识别JavaScript),但它的性能成本很高,因为它实际上会打开一堆不同的浏览器并进行每种测试。我不建议这样做,除非作为构建过程的最后一部分。

如果你想学习如何彻底测试JavaScript,这里有你的人:

http://www.letscodejavascript.com/

我正在使用jasmine.js进行单元测试。

我的编辑是Brackets,它有一个内置的网络服务器。括号打开您的html页面,该页面包含Chrome中的JS代码,每次保存html文件加载的JS文件时都会自动重新加载页面。

结合jasmine,我有一个设置,当我保存js文件时,我的单元测试总是运行。

但如果您想测试按钮的功能,这并没有真正的帮助。我认为有两种可能性:

  1. 如果您的Button启动了一些不会更改UI的代码,那么您应该将业务逻辑从事件处理程序中分离出来,这样您就可以在没有UI的情况下从单元测试中调用业务逻辑
  2. 如果按钮更改了UI,您可以使用Selenium或任何其他设计用于测试GUI的工具

看看Grunt,它是一个命令行"JavaScript任务运行器",可以帮助实现缩小、编译、linting和单元测试等自动化。

许多其他工具和框架都有很多插件。如果您不使用框架或不支持单元测试的框架,则应该使用测试框架。这里有一个(主要是tdd风格的)框架列表:用于tdd 的JavaScript单元测试工具

测试通常通过grunt test在控制台中"无头"运行。根据测试框架的不同,可能还会有一个外观更好的生成网页,向您显示最新的测试结果。你可以在IDE中设置一个按钮/热键/操作来运行这个控制台命令(大多数编辑器也有这个功能)来开始单元测试。

我使用了grunt作为Yeoman的一部分(它添加了一个包管理器、脚手架和一些grunt插件),我发现最有用的功能是可以对文件更改执行grunt操作。这意味着您甚至不需要设置IDE或文本编辑器就可以使用grunt。您只需保存一个文件,grunt就会自动运行单元测试之类的任务。另一个有用的功能是grunt serve命令与livereload插件相结合,它将启动一个服务器,在保存文件时自动在浏览器中重新加载页面。

不利的一面是,它似乎更专注于单页网络应用程序。如果您有在服务器端生成的复杂页面,并且只有一些javascript,那么它可能不适合您的需求。