'How can I make a mock of an authenticated user?
I am having trouble showing a mock logged in user in cucumber.
When a user is logged in they can, make a post.
My Errors:
(::) failed steps (::)
undefined local variable or method `user' for #<Cucumber::Rails::World:0x85974df4> (NameError)
./features/step_definitions/tasklist_steps.rb:25:in `/^that I want to post a link$/'
features/tasklist.feature:10:in `Given that I want to post a link'
Failing Scenarios:
cucumber features/tasklist.feature:9 # Scenario: Submitting a Link
1 scenario (1 failed)
4 steps (1 failed, 1 skipped, 1 undefined, 1 passed)
0m0.432s
My Cucumber:
Given /^I am an authenticated user$/ do
name = 'example'
email = '[email protected]'
password = 'secret'
Given %{I have one user "#{name}" with email "#{email}" and password "#{password}"}
And %{I go to the user login page}
And %{I fill in "username" with "#{name}"}
And %{I fill in "password" with "#{password}"}
And %{I press "Login"}
end
Given /^that I want to post a link$/ do
title = 'My revolutionary post'
website_link = "http://www.google.com"
category = 'activism'
user = authenticated user
And %{I go to the new post page(#{user})}
How can I make a mock of an authenticated user? so that the test will pass?
Solution 1:[1]
The line
user = authenticated user
is the problem. The right-hand side symbol user
is undefined. Is authenticated
a method here?
UPDATE: Question clarified
In your Cucumber feature you would have a scenario which starts something like this:
Scenario: Post a link as an authenticated user
Given I am logged in as the following user:
| name | John Doe |
| email | [email protected] |
| password | secret |
When I go to the posts page
And I follow "New post"
And I fill in the following:
| title | My revolutionary post |
| category | Activism |
etc
Then create a step definition like this:
Given /^I am logged in as the following user:$/ do |fields|
@user = User.create!(fields.rows_hash)
end
Now @user
will be available in your subsequent step definitions to complete the scenario. If you need to provide default model instance values for a user (i.e. additional to the 3 I've shown in the scenario) then you should consider using the Factory Girl gem in which case you could create the user like this:
@user = Factory(:user, fields.rows_hash)
Solution 2:[2]
Seems like you expect
user = authenticated user
to mean something. At least from what you have provided, it doesn't look like this does anything unless there's supposed to be a method elsewhere called "authenticated" that returns a user object.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Warren |