Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

wrong number of arguments (0 for 1) (ArgumentError)

I am using devise as an authentication system and created a scenario.

Scenario: Home page have a login page
    When I go to the home page
    And user is not logged in
    Then I should see "Sign In"

for step definition

When /^user is not logged in$/ do
  signed_in? == false
end

i had also added Devise helpers to the cucumber world.

World(Devise::Controllers::Helpers)

and cucumber is generating this error:

And user is not logged in           # features/step_definitions/web_steps.rb:260
      wrong number of arguments (0 for 1) (ArgumentError)
      ./features/step_definitions/web_steps.rb:261:in `/^user is not logged in$/'
      features/manage_home_page.feature:13:in `And user is not logged in'

Why is it generating and how to fix it?

Update

the definition of signed_in? method is

  # Return true if the given scope is signed in session. If no scope given, return
  # true if any scope is signed in. Does not run authentication hooks.
  def signed_in?(scope=nil)
    [ scope || Devise.mappings.keys ].flatten.any? do |scope| 
      warden.authenticate?(:scope => scope)
    end
  end

its defined in Devise and i added that helper to cucumber by writing this code World(Devise::Controllers::Helpers) into cucumber's paths.rb file.

like image 428
Nazar Hussain Avatar asked Nov 05 '22 14:11

Nazar Hussain


1 Answers

Try this instead

When /^user is not logged in$/ do
  user_signed_in?.should be_false
end

UPDATED I think you need to do something like this

When /^user is not logged in$/ do |user| 
  #check here user not logged in
end

or You could try modifying your feature to

Scenario: Home page has a login page
  Given I am on the home page
  And I am not logged in
  Then I should see "Sign In"

Then in the steps

Given /^user is not logged in$/ do
  visit('users/sign_out')  # this will ensure that the user is not logged in
end
like image 167
hindenbug Avatar answered Nov 10 '22 20:11

hindenbug