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