I'm new to cucumber and I find following snippets to test the Devise login feature. However it seems one more step missing, and I didn't find any solution:
Given /^that a confirmed user exists$/ do
pending # express the regexp above with the code you wish you had
end
Here the following code:
Feature: Session handling
In order to use the site
As a registered user
I need to be able to login and logout
Background:
Given that a confirmed user exists
Scenario Outline: Logging in
Given I am on the login page
When I fill in "user_email" with "<email>"
And I fill in "user_password" with "<password>"
And I press "Sign in"
Then I should <action>
Examples:
| email | password | action |
| [email protected] | test1234 | see "Signed in successfully" |
| [email protected] | password | see "Invalid email or password" |
Scenario: Logging out
Given I am logged in
When I go to the sign out link
Then I should see "Signed out successfully"
# Session
Given /^I am logged in$/ do
visit path_to('the login page')
fill_in('user_email', :with => @user.email)
fill_in('user_password', :with => @user.password)
click_button('Sign in')
if defined?(Spec::Rails::Matchers)
page.should have_content('Signed in successfully')
else
assert page.has_content?('Signed in successfully')
end
end
Factory.define :minimal_user, :class => User do |u|
u.username 'minimal'
u.email '[email protected]'
u.password 'test1234'
u.password_confirmation 'test1234'
end
Here the link to the orginal code
Many thanks for your help!!
Your title says "validate that a user exists", but that's might not be what you need to do there -- your Given
steps don't need to be asserting that something worked, they invoke code to create the application state for your scenario. Of course, they're still tests since they can still fail.
I think you're looking for something like this:
Given /^that a confirmed user exists$/ do
Factory.create(:minimal_user)
end
That will create and save a new confirmed user from your factory definition so the rest of the Scenario can proceed.
To complete the Daniel's answer and because I enable the Devise confirmable module, I should add a line in my fixture in order to tell that the user is confirmed.
For example:
Factory.define :minimal_user, :class => User do |u|
u.username 'minimal'
u.email '[email protected]'
u.password 'test1234'
u.password_confirmation 'test1234'
u.confirmed_at 'here the date you want'
end
Also, debug steps you can find here are very useful.
Hope it helps some people.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With