代码之家  ›  专栏  ›  技术社区  ›  Adam Tegen

铁路上的BDD——社区是否更落后于Shoulda或RSPEC?

  •  7
  • Adam Tegen  · 技术社区  · 5 年前

    对于一个新的应用程序,我想开始涉足BDD,并尝试在使用rspec和thoughtbot的shoulda之间做出决定。我喜欢应该使用的宏,事实上,它似乎没有重新设计Ruby/Rails的测试方式,只是提供了一个附加组件。另一方面,宏看起来有点太“神奇”,而不是对您正在测试的内容过于明确(不过,我从轻描淡写中了解到,编写一打“没有xxx”模型上的两行代码应该是无效的”是很烦人的)。老实说,我发现为模型编写规范/测试非常简单,而且几乎很无聊,但是我发现为控制器编写规范/测试非常困难,因为我不确定应该测试什么或如何编写它。

    我对嘲弄和存根的问题不太清楚,因为我认为他们给了你错误的假设(因为你可以告诉它认为它有你需要的任何数据,或者假装方法x被调用),我知道rspec大量使用了这两种方法。我喜欢rspec生成的文档,但我正在创建一个销售应用程序,而不是提供给客户,所以漂亮的文档没有那么有用。我喜欢黄瓜,但它似乎杀伤力太强了(是的,我知道它可以和shoulda一起使用)。

    在这一点上,Rails社区支持RSPEC还是应该支持?

    8 回复  |  直到 13 年前
        1
  •  2
  •   Damien MATHIEU    15 年前

    Rails社区支持RSPEC和Shoulda。这取决于开发者。 如果你喜欢,就用它。
    如果您喜欢rspec,请使用它;)

    它们都是不同的图书馆,有着相似的目标。这并不意味着每个开发人员都必须支持或反对它。这只意味着你可以使用它们中的任何一个。

    这取决于你的偏好(以及与你一起工作的其他开发人员),由你自己做出选择。

        2
  •  3
  •   Mike Woodhouse    15 年前

    关于模型和存根(以及假货、双打和其他东西)——当你在单元级别测试时,或者 TDD 或者在事实之后 指向 告诉它认为它有您需要的数据,使用存根。然后为实际对象编写一个测试,以确保它实际生成了数据。其目的是检查被测类的内部行为,而不是检查其上游连接是否正常工作。在单位级别-你 在集成或特性/故事/验收测试中测试端到端的行为(或者您喜欢的任何高级测试名称)。

    在我看来,一个模拟对象更多的是关于下游的——你想检查被测试的类是否进行了适当的调用——你不关心实际发生了什么,只关心用正确的参数调用了正确的方法。嘲弄真的很好。rspec有自己的模拟框架,但是 Mocha FlexMock 也被广泛使用。

    这里有很多关于命名法的讨论/解释/辩论/争论/争论,顺便说一句,马丁·福勒(他比大多数人都更有资格在这个主题上发音)在 clarify it 我认为这是有道理的。这里是 another article, with a few examples .

        3
  •  1
  •   hgmnz    15 年前

    可以在rspec中使用shoulda宏。这显然不太常见,但却是一个很好的选择: http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda .

    但正如Radar所说,最终你应该尝试不同的库并做出决定。

        4
  •  1
  •   Dan Croak    14 年前

    我用shoulda matchers和rspec。两全其美:RSPEC背后的大社区,快速发展,以及与Shoulda Matchers的大量报道。

        5
  •  0
  •   Ryan Bigg    15 年前

    守望者:758。

    RSPEC观察者:1279。

    最终,由你决定你喜欢哪一个。

        6
  •  0
  •   nathanvda    14 年前

    据我所知,自从你提到BDD,黄瓜和RSPEC之间似乎有一个更自然的匹配。我最喜欢的是它的验证宏。在rspec中有两种方法可以解决这个问题:

    1. 使用 shoulda macro's in RSpec 是一个很好的选择,之前回答过
    2. 使用 rspec-validations-expectations 插件,小,几乎不知道,但它只修复了这一点(简单的ActiveRecord验证测试)。

    您一定要选择您觉得最自然的库(测试的表达方式)。对于我来说,有了前面提到的选项,放弃shoulda选项更容易(至少它本身),我选择了rspec和cumber。

        7
  •  0
  •   Nerian    14 年前

    我目前的测试工具组合是:

    • 验收试验用牛排
    • 带驱动程序的浏览器模拟用Capybara:Selenium&Akefalos
    • 树桩机械师
    • 单元测试的RSPEC
        8
  •  0
  •   krainboltgreene    13 年前

    世界上很多Rails开发人员都在使用 RSpec 而其中的一些用途应该是。 DHH ,Rails的主要开发人员首选 Test::Unit Minitest . Thoughbot Shoulda 基于test::unit(当然还有minitest)和rspec。

    最终,作为 Rails Hotline 志愿者,你将从RSPEC获得更多的社区支持,还有大量额外的GEM专门用于改善RSPEC。有了这一点,minitest和test::unite是Ruby的核心。

    [意见]如果软件需要“行为流”,我倾向于使用rspec;如果需要纯单元功能,我倾向于使用minitest(主要是因为minitest的基准库非常简单)。