ruby-on-rails - 何时在登录过程的 BDD 周期中从 Cucumber 切换到 rspec

标签 ruby-on-rails rspec cucumber bdd factory-bot

我仍在尝试理解 BDD 循环中 cucumberrspec 的组合。

我已经为一个非常简单的登录系统定义了以下场景:

Feature: Log in

In order to get access to the application
As a user
I want to log in

Scenario: User logs in successfully
  Given I exist as a user
  When I go to the login page
  And I fill in "username" with "gabrielhilal"
  And I fill in "password" with "secret"
  And I press "Login"
  Then I should see "Welcome gabrielhilal"
  And I should be redirected to the home page


Scenario: User enters wrong email/password combination
  Given I exist as a user
  When I go to the login page
  And I fill in "username" with "gabrielhilal"
  And I fill in "password" with "wrongpassword"
  And I press "Login"
  Then I should see "Invalid username/password combination."
  And I should see the login page again

然后,我开始定义步骤,等待合适的时机跳入rspec

我通过了使用 FactoryGirl 模拟用户并定义步骤的第一步:

Given(/^I exist as a user$/) do
  @user = FactoryGirl.create(:user)
end

我为 session 添加了路由、 Controller 和操作:

When(/^I go to the login page$/) do
  visit login_path
end

我创建了登录表单:

When(/^I fill in "([^"]*)" with "([^"]*)"$/) do |field, value|
  fill_in field, with: value
end
When(/^I press "([^"]*)"$/) do |button|
  click_on(button)
end

我将 flash 消息添加到我的布局中:

When(/^I should see "([^"]*)"$/) do |arg|
  page.should have_content(arg)
end

我为主页添加了路由和 Controller (static_pages):

When(/^I should be redirected to the home page$/) do
  visit home_path
end

我解决了最后一步:

When(/^I should see the login page again$/) do
  visit login_path
end

而且我全都绿了...在这些场景中,我并不觉得需要 rspec。我错过了什么?

我想了解我应该用 rspec 测试什么。我觉得用 rspec 再次测试所有内容是不对的....

最佳答案

我对整个 Cucumber/rspec 的体验如下:一开始,当你开始使用 BDD 和 Cucumber 时,一切都是绿色的,就像你的例子一样。您甚至可以在其前面放置一个浏览器,以便在真实浏览器中进行测试。然后你不断地向你的 Cucumber 测试中添加越来越多的东西。这很好而且很棒,因为您正在测试您的 web 应用程序的整个堆栈,这(对我来说)是一个很大的优势。您正在测试用户看到的内容。

但是当您的测试套件变大并且您开始执行诸如测试返回页面中的标签之类的事情时,这就是您在重构代码时开始遇到问题的时候。此外,Cucumber 对于大型网站来说速度很慢。

我认为最好的方法是使用尽可能少的 Cucumer 和尽可能多的 RSpec。它大大加快了测试速度。因此,在我看来,使用 RSpec 测试您的 Controller 和模型以及使用 Cucumber 测试您的前端是正确的方法(大多数时候,没有太多的前端测试)。对于所有这些东西都紧密集成并且您确实想检查整个堆栈的区域(例如,就像您对登录所做的那样),我认为 Cucumber 是适合这些情况的出色工具。

关于ruby-on-rails - 何时在登录过程的 BDD 周期中从 Cucumber 切换到 rspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192413/

相关文章:

ruby-on-rails - Heroku 上 SSL 的解决方法

ruby-on-rails - 如何在选择输入中进行收集取决于另一个选择输入的值

ruby-on-rails - 带有 Capybara have_css 匹配器的 Rspec 不起作用

ruby-on-rails - 使用 Bullet 和 RSpec gem 减少 n+1 查询

visual-studio-code - 在 visual studio 代码中调试 Protractor 测试时出现 cucumber 错误,但在运行模式下一切正常

ruby-on-rails - 用于 Rails 的谷歌网络搜索 API?

mysql - 在 Rails 中以安全的方式使用子字符串查询

ruby-on-rails - 如何在 RSpec 测试中剔除 PDF 生成?

java - 如何根据预定义变量或config.properties中导入不同的包?

ruby - 如何在纯 Ruby(无 Rails)中为 IE8 使用 Capybara?