ruby on rails - Rspec no route matches, checking for flash message in controller -


i need test flash message comes when specific exception raised. getting no route matches error , have looked through other topics "rspec controller test, no routes matches" , still not sure wrong. first time writing rspec test. commented out lines various other attempts test pass.

audit/businesses_controller.rb:

class audit::businessescontroller < applicationcontroller     # put /audit/businesses/:id def update   remove_deleted_account_numbers_in(params)   @business = @jurisdiction.businesses.find(params[:id])   @business.changed_by = current_user  if @business.update_attributes(audit_business_params)   success_message('update')  else   @business.initialize_accounts   @business = @business   render :edit, alert: t('flash.save_failed') end  rescue activerecord::statementinvalid => e   if e.message.include? "foreign key constraint"     @business = @jurisdiction.businesses.find(params[:id])     @business.initialize_accounts     @business = @business   render :edit, alert: "this account number in use , cannot    deleted"   else     raise e   end end 

business_controller_spec.rb:

require "spec_helper"  describe audit::businessescontroller  describe "handling activerecord::statementinvalid"  before {delete, url = 'audit/jurisdictions/:jurisdiction_id/businesses/:id(.:format)'}   "should rescue flash message" #     /audit/jurisdictions/:jurisdiction_id/businesses/:id(.:format)  #      delete, businesses_id: '80776', jurisdiction_id: '795', format: 'html', id: "234769"      expect(page).to have_content("this account number in use , cannot deleted")  end  end end 

rake routes:

audit_businesses        /audit/jurisdictions/:jurisdiction_id/businesses(.:format)                                                             audit/businesses# post    /audit/jurisdictions/:jurisdiction_id/businesses(.:format)                                                             audit/businesses#create new_audit_business      /audit/jurisdictions/:jurisdiction_id/businesses/new(.:format)                                                          audit/businesses#new   edit_audit_business      /audit/jurisdictions/:jurisdiction_id/businesses/:id/edit(.:format)                                                     audit/businesses#edit audit_business     /audit/jurisdictions/:jurisdiction_id/businesses/:id(.:format)                                                          audit/businesses#show put    /audit/jurisdictions/:jurisdiction_id/businesses/:id(.:format)                                                       audit/businesses#update delete /audit/jurisdictions/:jurisdiction_id/businesses/:id(.:format)                                                       audit/businesses#destroy 

error message:

failure/error: before { delete audit_business_path(:jurisdiction_id, :id, :format) } actioncontroller::routingerror:    no route matches {:controller=>"audit/businesses", :action=>"/audit/jurisdictions/jurisdiction_id/businesses/id.format"}  # ./spec/controllers/businesses_controller_spec.rb:6:in `block (3 levels) in <top (required)>' 

when change spec to:

describe audit::businessescontroller   describe "handling activerecord::statementinvalid"    "should rescue flash message"      put :update, :jurisdiction_id => 1, :id => 1, :format => html      expect(controller).to set_flash[:alert].to(/this account number in use , cannot deleted/).now 

the error is:

failure/error: put :update, :jurisdiction_id => 1, :id => 1, :format => html  nomethoderror:    undefined method `can_update?' nil:nilclass 

routes.rb:

  namespace :audit root to: 'site#home'  resources :labels,        only: ['index', 'destroy']   post 'delete_queue', on: :collection   'print',         on: :collection   'print_view',    on: :collection   'mark_printed',  on: :collection   'users',         on: :collection end resources :auditor_goals resources :contracts resource  :contract_work, only: %w[show update], controller: 'contract_work' resources :manpower  resource :county_budgets, only: :update   'search' end   'intro_letter_search' => 'files#intro_letter_search' put  'intro_letter_update' => 'files#intro_letter_update'  'search'           => 'files#search'  'calendar'         => 'files#calendar'  'autocomplete'     => 'files#autocomplete'  'direct'           => 'files#direct'   'size_code_select' => 'businesses#size_code_select'  scope '/jurisdictions/:jurisdiction_id'   resources :businesses, controller: 'businesses'   resources :files,      controller: 'files'      'print',         on: :member   end     # 'page/:page', action: :index, on: :collection end end 

for rspec test instead write

expect(page).to have_content("flash message")

where "flash message" actual message of error or exception you're trying make pass. eg for, flash[:notice] = "an error occurred", put have_content("an error occurred")

hope helps?!

justin


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -