Cucumber 和 RSpec 都用于 BDD,但用途不同。
将 Cucumber 视为通过与 Web 浏览器交互从用户的角度描述发生的情况。所以你可以采取如下步骤:
Given I'm not logged in
When I login
Then I should be on the user dashboard page
相当广泛,但背后有很多事情发生。 Cucumber 有助于确保涵盖所有这些高级特性和功能(例如,当您的用户登录时,他们会被带到正确的页面)。但它不是测试较低级别代码的好工具。这就是 RSpec 的用武之地。
以上面的登录示例为例。您的用户可能使用电子邮件地址或用户名登录。您可能想确保电子邮件地址有效或用户名具有一定的长度......或者他们用于登录的内容是唯一的。您可以在用户模型中通过验证来执行此操作。
这是一个简单的示例,但这是您使用 RSpec 测试的类型(在您的 spec/models/user_spec.rb 文件中)。这是not您可以使用 Cucumber 进行测试。
所以底线是:
Cucumber 用于更高级别的测试,从用户的角度描述广泛的功能
RSpec 用于较低级别的测试,描述类、方法、模型、控制器等实际工作方式的详细信息。
这篇文章实际上很好地解释了何时从一种工具过渡到另一种工具:
http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/ http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/
我还推荐“RSpec 书 http://pragprog.com/book/achbd/the-rspec-book" and "Rails 测试处方 http://pragprog.com/book/nrtest/rails-test-prescriptions“关于工具和一般测试的良好资源。
附: - 不要混淆,但实际上你也可以使用 RSpec 来处理高级的东西。但其中一些决定取决于您更喜欢哪种工具,或者您是否正在与非技术客户合作,他们会从 Cucumber 用于描述场景的用户友好语法中受益更多。