简体   繁体   中英

Writing capybara/rspec tests with Rails… called id for nil error

Here is my test:

require 'spec_helper'

describe "user signs in", focus: true do
  it "allows users to sign in with their email address and password" do
    user = FactoryGirl.create(:user)
    visit "/"
    click_link "SIGN IN"
    fill_in "user_email", with: user.email
    fill_in "user_password", with: user.password
    click_button "#sign-in-btn"
    page.should have_content "Vitals"
  end
end

Here is the error:

  1) user signs in allows users to sign in with their email address and password
     Failure/Error: visit "/"
     ActionView::Template::Error:
       Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
     # ./app/views/devise/registrations/_form.html.erb:2:in `block in _app_views_devise_registrations__form_html_erb__3809420936711950801_70201058646680'
     # ./app/views/devise/registrations/_form.html.erb:1:in `_app_views_devise_registrations__form_html_erb__3809420936711950801_70201058646680'
     # ./app/views/shared/modals/_sign_up.html.erb:39:in `_app_views_shared_modals__sign_up_html_erb___493445099205594204_70201081251380'
     # ./app/views/shared/_modals.html.erb:2:in `_app_views_shared__modals_html_erb__2261979984426842788_70201058520760'
     # ./app/views/layouts/home.html.erb:16:in `_app_views_layouts_home_html_erb__3485816781407765933_70201082986040'
     # ./app/controllers/pages_controller.rb:18:in `home'
     # ./spec/requests/user_registration_spec.rb:8:in `block (2 levels) in <top (required)>'

Here is my Index method:

  def home
    @user = User.new
    @account_type = AccountType.legend
    render layout: 'home'
  end

The problem is that when the home page is visited there are a couple of instance variables that need to be available for other items on the page... how do I account for those in my sign in test?

Don't worry about setting the instance variable. The actual home action will be hit. So just create all the data needed to hit the action.

I think in your case its the AccountType. Create an account type for "legend" in your test and you should be good i think

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM