黄瓜与RSpec

我想开始潜入BDD。 我之前从未使用过TDD,也不确定我是否应该从学习RSpec开始,然后跳到Cucumber或者直接使用Cucumber。

我一直在互联网上阅读这两本书,在我看来,黄瓜可能是RSpec的“替代品”。 我是对的还是应该用于某些事情而另一个用于其他事物?

是的,黄瓜和rspec都用于BDD。

我个人更喜欢Cucumber,但是有些人发现它很不合适,并且更喜欢他们的测试更少的英语,更多的代码。 但两者都是很好的工具。

黄瓜和RSpec都用于BDD,但有不同的用途。

想想Cucumber通过与Web浏览器的交互来描述从用户角度发生的事情。 所以你可以采取以下步骤:

Given I'm not logged in When I login Then I should be on the user dashboard page 

相当广泛,但那里有很多事情要发生。 黄瓜有助于确保涵盖所有这些高级特性和function(例如,当您的用户登录时,它们将被带到正确的页面)。 但它不是测试低级代码的好工具。 这就是RSpec的用武之地。

以上面的登录示例为例。 您的用户可能正在使用电子邮件地址或用户名登录。 您可能希望确保电子邮件地址有效或用户名是一定长度……或者他们用于登录的东西是唯一的。 您可以在用户模型中通过validation执行此操作。

这是一个简单的例子,但这是你使用RSpec测试的东西(在你的spec / models / user_spec.rb文件中)。 这不是你用Cucumber测试的东西。

所以底线是:

从用户的角度来看,用于描述广泛function的更高级别测试的黄瓜

RSpec用于较低级别的测试,描述您的类,方法,模型,控制器等应如何实际工作的详细信息。

这篇文章实际上很好地解释了何时从一个工具转换到另一个工具:

http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/

我还推荐“ RSpec Book ”和“ Rails Test Prescriptions ”,以获得有关工具和测试的一般资源。

PS – 不要混淆事情,但实际上你也可以使用RSpec作为高级别的东西。 但是,其中一些决定取决于您更喜欢哪种工具,或者您是否与非技术客户合作,而这些客户将从Cucumber的用户友好语法中获益更多,以便描述方案。

Kenton对这个答案做得很好。 以下是RSpec和Cucumber的作者如何看待它:

我们使用Cucumber来描述应用程序的行为,并使用RSpec来描述对象的行为。

虽然我们使用Cucumber专注于高级行为,并使用RSpec专注于更细粒度的行为,但每个行为都可以用于任何目的。