我仍在尝试理解 BDD 循环中 cucumber
和 rspec
的组合。
我已经为一个非常简单的登录系统定义了以下场景:
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/