【问题标题】:Should I be using RSpec or Cucumber我应该使用 RSpec 还是 Cucumber
【发布时间】:2011-03-15 17:39:42
【问题描述】:

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

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

现在我正在使用 cucumber 进行测试,但鉴于这都是后端,没有 Web 界面,我不应该使用 cucumber 吗?

我正在寻找何时使用 RPSEC 与 Cucumber 混淆。

谢谢

【问题讨论】:

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


【解决方案1】:

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

我强烈建议你看看railscasts.com 的黄瓜 railscast。另外,请确保您使用 webrat 并可能使用其他东西来自动加载您的规范,例如 watchr(我更喜欢)。

【讨论】:

  • 谢谢,我已经看过教程并阅读了 RSpec 书。但如前所述,我坚持我用什么来做什么?鉴于我上面给出的示例是针对 RSpec 还是黄瓜?身份证?
  • 取决于您如何测试 find_reply。如果这只是您单独检查的模型的一种方法,请使用 rspec。另一方面,如果您需要检查 find_reply、get_reply、send_reply 或其他任何内容的组合,最好使用带有 cucumber 的场景。最后,如果测试符合您的需求,它就是好的,所以它有时可能是主观的。有些人也喜欢使用 rspec 制作场景。但我会坚持使用 rspec 进行单元测试,使用黄瓜进行场景测试。
  • 这里提到的工具的一些替代品是 guard 用于自动运行测试,capybara 用于集成测试
【解决方案2】:

我建议您永远不要使用 Cucumber,除非您专门担任业务分析师。这让您的生活更轻松:您的所有测试都将在 Rspec 中。

黄瓜会影响您的工作效率和理智。运行并行测试环境、添加抽象层并使用其奇怪的语法破坏您的编辑器会浪费时间。我已经在我的博客上广泛地写过这个: Why Bother With Cucumber Testing?

【讨论】:

  • 您会很高兴听到 Spree 已离开 Cucumber。我刚刚进入 BDD 的思维框架,我不禁认为我已经躲过了会破坏生产力的子弹。
  • 虽然这篇文章很老,但我必须说它仍然很相关。我最近刚接触 BDD,不知道如何使用 Rspec 或 Cucumber,并同时使用它们。多么大的错误(至少对我而言)。当我在我的模型和控制器上执行 Rspec 测试时,我的工作效率提高了,但是当我使用 Cucumber 时,它只是一个时间消耗者,我实际上感觉效率降低了。我认为您对何时使用 Cucumber 的回答是正确的,因为它似乎真正适用于大型公司,不适用于像我这样的小公司。
【解决方案3】:

如果我还没有 Stack Overflow 帐户,我会创建一个只是为了写这篇文章。我敦促你重新阅读@Jack Kinsella 的answer

大约 3 个月前,我加入了 BDD,爱上了它,并很快开始使用 Cucumber 来处理所有事情。无论如何,我都强迫它进入每个项目

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

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


@Jack 直截了当地说相信那些文章是暂时流传的。他还给了我我正在寻找的语言。我现在认为他的文章是关于这个主题的最终决定:)

据他说,我们实际使用 Cucumber 的目的是“集成测试”。我之前一直不明白这是什么意思

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

集成测试
代码的不同分支如何协同工作以创建网站。 我输入我的名字并点击登录,然后应该会被带到主页
-> 也使用 RSpec!
(在 RSpec 中,添加处理多种技术相互接触所需的任何内容。对于代码到 web 浏览器的示例:Capybara、Watir 等)

验收测试
我们中的许多人不需要它。有人与您签订了一份合同说“我要写'我可以将子页面添加到我的微型网站。'在文本文件中”。你给我写代码让它变绿
-> 使用黄瓜。仅当您必须进行此类测试时。你几乎肯定不会这样做

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

我有那么一刻“但我喜欢 Cucumber 如何将英语与代码分开”。常规 bdd 也这样做。 "rspec --format nested"Jasmine test results

@Jack 是对的。黄瓜没有添加任何东西;不是我们一直使用它的方式。而且要花很多钱。引用他的话:

为什么不承认自己不进行验收测试并且在项目中不需要它?使用 Capybara 将 Cucumber 替换为纯集成测试,您会惊讶于您可以提高多少工作效率

【讨论】:

  • 当然,在他的文章向我展示这一顿悟之前,我这次可能会像以往一样犯错。不过,我确实希望这是“最终解决方案”。看起来很有希望,不是吗?所有 3 个概念都进行了划分和解释; “1个框架来统治他们”;优雅的解决方案,我希望!
【解决方案4】:

为了完成 SpyrosP 的回答,Sarah Mei 发表了一篇很棒的博客文章,其中描述了您同时使用 Rspec 和 Cucumber 的场景。它被称为 oustide-in Behavior Driven Development 和 you can find it here

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      随着时间的推移,您会发​​现两大测试需求:

      1. 我的代码还能用吗?
      2. 我的用户还能执行已经实施的操作吗?

      作为一名开发人员,我倾向于认为 (1) 是针对每一次代码更改,以及 (2) 当我完成一项功能和/或部署时。

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

      确实,它应该是如此通用,以至于如果 (2) 中出现问题,您需要进行大量研究(表中缺少一行),而 (1) 中的失败应该指出问题所在的确切类别.

      通常我发现自己处于需要单独集成+验收测试而没有 Cucumber 负担的情况。首先,我使用 RSpec 标签过滤掉这些测试。每当我需要更多时,我都会选择Steak+Capybara,因为它可以在我已经非常熟悉的东西之上实现像黄瓜一样的目标。

      【讨论】:

        【解决方案7】:

        一定要同时使用。使用 cucumber 进行用户体验测试(视图),使用 rspec 测试内部(模型等)。您可以编写控制器 rspec 测试,但我认为它们不是必需的(尝试将逻辑移至模型)。 无论您的系统是什么,我都强烈建议您使用 Cucumber,因为场景会让您和您的利益相关者以清晰的书面方式了解系统的功能。 您还将准备好您的文档,并且您将始终知道您在哪里以及您要去哪里。您还将在未来将场景与支持问题相关联。 顺便说一句,不要在场景中使用变量,它们应该是可以理解的。 如果您希望它们像 rspecs 一样快速运行,请使用 poltergeist(phantomjs)。

        我一直很想不使用 cucumber,因为在许多情况下它不像 rspec 那样简单。然而,每次我明白我需要场景来完全控制项目时。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          • 2018-09-05
          • 1970-01-01
          • 1970-01-01
          • 2015-10-16
          • 2023-03-06
          相关资源
          最近更新 更多