ruby on rails - Sign in user without creating multiple users in rspec -


using rspec , devise, i'm able sign in user run tests. however, i've come across problem method because using before :each causing multiple users created, causes tests break.

should change method of testing? or change method of signing in user?

campaign_controller_spec.rb

before :each   @user = factorygirl.create(:user)   sign_in :user, @user   @business = factorygirl.create(:business, user: @user) end  describe "get #index"   before :each     factorygirl.create(:active_campaign, business: @business)     factorygirl.create(:inactive_campaign, business: @business)   end    "no status or type filter"     :index                                   #  <- line 22 of error     expect(assigns(:campaigns).size).to eq 2   end    'status filter'     :index, status: 'active'     expect(assigns(:campaigns).size).to eq 1   end end 

campaigns_controller.rb

def index   # current user's campaigns   @campaigns = current_user.business.campaigns    # filter status (constraints in routes)   @campaigns = @campaigns.send(params[:status]) unless params[:status] == 'all'   #  <- line 7 of error end 

the problem of campaigns belong business belong user-1 in spec, in controller, campaigns belong user (because several being created) doesn't have campaigns associated.

the exact error is:

  1) campaignscontroller [signed in] #index no status or type filter      failure/error: :index      typeerror:        nil not symbol nor string      # ./app/controllers/campaigns_controller.rb:7:in `index'      # ./spec/controllers/campaigns_controller_spec.rb:22:in `block (4 levels) in <top (required)>' 

small update

i have database cleaner gem installed, should clear db between tests. here config (just in case incorrect):

#databasecleaner config.before(:suite)   databasecleaner.strategy = :transaction   databasecleaner.clean_with(:truncation) end  config.before(:each)   databasecleaner.start end  config.after(:each)   databasecleaner.clean end 

when using factory_girl you'll want use database_cleaner gem clean database between tests. check out:

https://github.com/databasecleaner/database_cleaner#user-content-rspec-example

edit:

realized error isn't caused think it's caused. it's because you're doing .send(params[:status]) when params[:status] nil because it's not passed in on call get :index... once .send(nil) invoked stack trace.


Comments

Popular posts from this blog

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

html - Outlook 2010 Anchor (url/address/link) -

android - How to create dynamically Fragment pager adapter -