前端testing:testing什么和如何testing,以及使用什么工具?

我一直在为Ruby代码编写testing,但是作为一个前端开发人员,我显然有兴趣把它写入我为我的前端代码编写的代码中。 有很多不同的select,我一直在玩:

  • CasperJS
  • 水豚&Rspec
  • 茉莉花
  • 黄瓜或只是Rspec

什么是人们使用testing? 还有,人们testing什么呢? 只是JavaScript? 链接? forms? 硬编码的内容?

任何想法将不胜感激。

几个月前我也有同样的问题,在和许多开发人员进行了大量的研究之后,我发现了这一点。 你应该unit testing你的JavaScript,写一小组UI集成testing,避免logging和回放testing工具。 让我更详细地解释一下。

首先,考虑testing金字塔 。 这是Mike Cohn创造的一个有趣的类比,它可以帮助你决定你应该做什么样的testing。 在金字塔的底部是unit testing,这是坚实的,并提供快速的反馈。 这些应该是你的testing策略的基础,从而占据金字塔的最大部分。 在顶部,你有UItesting。 那些是直接与您的UI交互的testing,例如Selenium。 尽pipe这些testing可能会帮助您发现错误,但是它们更加昂贵并且反​​馈速度非常慢。 另外,取决于你使用的工具,它们变得非常脆弱,你最终会花费更多的时间来维护这些testing,而不是编写实际的生产代码。 中间的服务层包括不需要UI的集成testing。 例如,在Rails中,您将直接testingREST接口,而不是与DOM元素进行交互。

现在回到你的问题。 我发现我可以通过编写足够多的JSunit testing来大大减less我的项目中的错误数量,这是一个用JavaScript编写的Spring Roo(Java)的Web应用程序。 在我的应用程序中,有很多用JS编写的逻辑,这就是我在这里testing的东西。 我不关心页面的实际外观,或者animation是否应该如此。 我testing如果我写在JS中的模块将执行预期的逻辑,如果元素类正确分配,如果错误条件处理得当。 对于这些testing,我一直在使用茉莉花。 这是一个伟大的工具。 这是很容易学习,并有很好的嘲笑能力,这就是所谓的间谍。 如果你使用jQuery, Jasmine-jQuery增加了更多的function。 特别是,它允许您指定灯具,这是HTML代码的片段,所以您不必手动模拟DOM。 我已经将这个工具与maven集成在一起,这些testing是我的CI策略的一部分。

你必须小心UItesting,特别是如果你依赖像Selenium这样的logging/回放工具。 由于用户界面经常变化,这些testing不断发生,你将花费大量的时间来查明testing是否真的失败或者只是过时了。 另外,它们不会像unit testing那样增加价值。 由于他们需要一个集成的环境来运行,所以大多数情况下,只有在完成开发之后才能运行它们,而修复的成本则更高。

对于烟雾/回归testing,UItesting非常有用。 如果你需要自动化这些,那么你应该注意一些危险。 写下你的testing,不要logging它们 。 logging的testing通常依赖于自动生成的xpath,这些xpath会在您的代码上进行一些小改动。 我相信Cucumber是编写这些testing的好框架,您可以使用它和WebDriver一起使浏览器交互自动化。 代码考虑testing 。 在UItesting中,您将不得不使元素更容易find,所以您不必依赖复杂的xpath。 添加类和id元素,你通常不会经常。 不要为每个小angular落案例写testing。 这些testing写入花费太高,运行时间太长。 您应该关注探索大部分function的案例。 如果你在这个级别编写了太多的testing,你可能会testing你之前在unit testing中testing过的相同function(假设你已经写过)。

在我目前的项目中,我使用Spock和Geb来编写UItesting。 我发现这些工具令人惊叹。 它们是用Groovy编写的,它更适合我的Java项目。

有很多的select和工具。 但他们的select取决于你是否有一个Web UI或它是一个桌面应用程序?

从你提到的工具假设是Web UI。 我build议Selenium(又名WebDriver): http : //seleniumhq.org/docs/

它支持多种语言(Ruby在列表中)。 它可以针对各种浏览器运行,广告很容易使用大量的教程和提示。 噢,当然是免费的:)