我应该使用RSpec还是黄瓜?

时间:2011-03-15 17:39:43

标签: ruby-on-rails ruby-on-rails-3 rspec cucumber

我是Rails 3中单元/功能测试的新手。所以我现在开始,迟到总比没有好。

我在/lib/mailingjob.rb中有一个名为find_reply(body)的方法

现在我正在使用黄瓜来测试这个,但鉴于这是后端,没有网络界面,我不应该使用黄瓜吗?

我发现何时使用RPSEC与黄瓜混淆。

由于

7 个答案:

答案 0 :(得分:20)

在我看来,你需要同时使用两者。 Rspec非常适合单元测试,即测试模型,控制器,视图。另一方面,黄瓜是一个非常好的工具,可以检查完整的场景,例如用户登录,点击链接,他应该查看此内容。

我强烈建议您查看来自railscasts.com的黄瓜护栏广播。此外,请确保您使用webrat和某些东西来自动加载您的规格,如watchr(我更喜欢)。

答案 1 :(得分:11)

除非你是专门担任商业分析师,否则我建议你不要使用黄瓜。这让你的生活更轻松:你所有的测试都将在Rspec。

黄瓜会降低你的生产力和理智。运行并行测试环境,添加抽象层并用奇怪的语法打破编辑器会导致时间浪费。我在博客上广泛地写过这篇文章:  Why Bother With Cucumber Testing?

答案 2 :(得分:3)

如果我还没有Stack Overflow帐户,我会写一篇JUST来写这篇文章。我敦促你重新阅读@Jack Kinsella的answer

我大约3个月前进入BDD,爱上了它,很快就开始使用Cucumber。无论什么

,我都强迫它进入每个项目

最近,我不得不学习另一种语言,我的第一步是设置测试环境。我发现了这三篇文章:

老实说,他们的内容并不那么重要;重要的是他们暗示了一个整体的想法。我开始怀疑我一直在使用黄瓜错了,我去寻找答案。今天早上我发现了你的问题,以及@Jack Kinsella的博客文章


@Jack马上出来说,认为那些文章暂时在盘旋。他还给了我正在寻找的语言。我现在认为他的文章是关于这个主题的最后一句话:)

据他说,我们实际上使用Cucumber的是“集成测试”。

之前,我从未明白这意味着什么
  

单元测试
      代码如何在内部工作。 Math.Add(1,1)应为2 ,但网站用户并不在意。给我一个网页!
       - >使用RSpec或等效的

     

整合测试
      代码的不同分支如何协同工作以构建网站。 我输入我的姓名并单击登录,然后应该转到主页
       - >也可以使用RSpec!
      (在RSpec内部,添加你需要处理的多种技术 - 触摸彼此。对于代码到webBrowsers的例子:Capybara,Watir等)

     

验收测试
      我们许多人不需要它。有人和你签了一份合同,说“我要写'我可以在我的微网站上添加子页。'在文本文件中“。你给我写了一个让它变成绿色的代码
       - >使用黄瓜。只有你必须做这种测试。你几乎肯定不会

多么优雅的解决方案。没有第二个测试环境。没有步骤目录和大量额外文件!

我有一段时间“但我喜欢Cucumber如何从代码中分离英语”。普通的bdd也是如此。 "rspec --format nested"Jasmine test results

@Jack是对的。黄瓜没有添加任何东西;不是我们一直在使用它的方式。它的成本很高。引用他:

  

为什么不承认自己不进行验收测试,并且在项目中不需要它?使用Capybara交换Cucumber进行纯粹的集成测试,你会惊讶于你可以提高效率

答案 3 :(得分:2)

为了完成SpyrosP的回答,Sarah Mei有一篇很棒的博客文章描述了一个使用Rspec和Cucumber的场景。它被称为oustide-in行为驱动开发和you can find it here

答案 4 :(得分:1)

然而,我认为杰克的大部分问题都可以通过一位优秀的黄瓜编辑来解决。所以问题不在于黄瓜。问题在于,两年前他写这篇文章时,没有一位能干的编辑。但是今天RubyMine拥有完整的黄瓜编辑功能。虽然它不是免费的,但它可以解决Jack的大部分问题:自动完成,指出错误,重构。所以你可能想回去查看他提出的观点,看看它们今天是否仍然有效。

答案 5 :(得分:0)

我认为多年后这个问题非常简单:如果你现在不知道该使用什么,那就从RSpec开始吧,因为它是你所需要的所有测试的核心。

随着时间的推移,您将发现两个重要的测试需求:

  1. 我的代码是否仍在使用?
  2. 我的用户是否仍然可以执行已经实施的操作?
  3. 作为一名开发人员,我倾向于认为(1)适用于每一个代码更改,(2)当我完成一项功能和/或部署时。

    拥有两个测试套件很不错,因为在部署期间,您可以坐下来运行一个非常通用的测试套件:我的用户功能是否仍在运行?我可以最终部署吗?

    实际上,它应该是如此通用,以至于如果某些内容中断(2)你需要做一些繁重的研究(表中缺少一行),而(1)中的失败应该指出确切的类与问题

    通常我发现自己处于需要单独整合+验收测试而没有黄瓜负担的情况。首先,我使用RSpec标签来过滤掉这些测试。每当我需要更多时,我都喜欢前往Steak+Capybara,因为它可以让Cucumber成为我已经非常了解的目标。

答案 6 :(得分:0)

绝对使用两者。使用黄瓜进行用户体验测试(视图),使用rspec测试内部(模型等)。您可以编写控制器rspec测试但我认为它们不是必需的(尝试将逻辑移动到模型)。 无论您的系统是什么,我都强烈建议您使用Cucumber,因为方案可以让您和您的利益相关者以清晰的书面方式了解您系统的功能。 您还可以准备好文档,并且始终知道自己的位置和前进方向。您还将在未来将方案与支持问题联系起来。 通过在场景中不使用变量的方式对它们进行纠正,它们应该是可以理解的。 如果你想让它们快速运行,因为rspecs使用了poltergeist(phantomjs)。

我一直试图不使用黄瓜,因为在很多情况下它并不像rspec那么简单。但是,每次我理解我需要方案来完全控制项目。