ruby on rails - Uncountable model testing with rspec and capybara -
i using rails 5.0.0.1 build small inventory type system equipment lone people. 1 of models named equipment of course uncountable model (singular , plural of equipment same). when try write feature tests model 1 of 2 possible errors when try visit index page. if use "visit equipment_url" told there no route "show" because there no id. correct error if wanted go show don't. if try "visit equipment_index_url" told there no method visit.
routes prefix verb uri pattern controller#action root / inventory#index delete_equipment /equipment/:id/delete(.:format) equipment#delete delete /equipment/:id/delete(.:format) equipment#destroy equipment_index /equipment(.:format) equipment#index post /equipment(.:format) equipment#create new_equipment /equipment/new(.:format) equipment#new edit_equipment /equipment/:id/edit(.:format) equipment#edit equipment /equipment/:id(.:format) equipment#show patch /equipment/:id(.:format) equipment#update put /equipment/:id(.:format) equipment#update delete /equipment/:id(.:format) equipment#destroy delete_specialty /specialties/:id/delete(.:format) specialties#delete delete /specialties/:id/delete(.:format) specialties#destroy specialties /specialties(.:format) specialties#index post /specialties(.:format) specialties#create new_specialty /specialties/new(.:format) specialties#new edit_specialty /specialties/:id/edit(.:format) specialties#edit specialty /specialties/:id(.:format) specialties#show patch /specialties/:id(.:format) specialties#update put /specialties/:id(.:format) specialties#update delete /specialties/:id(.:format) specialties#destroy delete_event /events/:id/delete(.:format) events#delete delete /events/:id/delete(.:format) events#destroy events /events(.:format) events#index post /events(.:format) events#create new_event /events/new(.:format) events#new edit_event /events/:id/edit(.:format) events#edit event /events/:id(.:format) events#show patch /events/:id(.:format) events#update put /events/:id(.:format) events#update delete /events/:id(.:format) events#destroy delete_type /types/:id/delete(.:format) types#delete delete /types/:id/delete(.:format) types#destroy types /types(.:format) types#index post /types(.:format) types#create new_type /types/new(.:format) types#new edit_type /types/:id/edit(.:format) types#edit type /types/:id(.:format) types#show patch /types/:id(.:format) types#update put /types/:id(.:format) types#update delete /types/:id(.:format) types#destroy delete_event_specialty /event_specialties/:id/delete(.:format) event_specialties#delete delete /event_specialties/:id/delete(.:format) event_specialties#destroy event_specialties /event_specialties(.:format) event_specialties#index post /event_specialties(.:format) event_specialties#create new_event_specialty /event_specialties/new(.:format) event_specialties#new edit_event_specialty /event_specialties/:id/edit(.:format) event_specialties#edit event_specialty /event_specialties/:id(.:format) event_specialties#show patch /event_specialties/:id(.:format) event_specialties#update put /event_specialties/:id(.:format) event_specialties#update delete /event_specialties/:id(.:format) event_specialties#destroy spec/features/equipment_spec.rb
require 'rails_helper' rspec.describe "equipment", type: :request describe "get /equipment" "adds new equipment" @types = factorygirl.create_list(:multitype, 25) @specialties = factorygirl.create_list(:multispecialty, 25) visit equipment_index_url expect{ click_link 'new equipment' fill_in "equipment no", with: "2" fill_in "serial", with: "123456" fill_in "description", with: "test equipment" select "radio10", from: "equipment_type_id" select "tech13", from: "equipment_specialty_id" click_button "create equipment" }.to change(equipment, :count).by(1) expect(page).to have_content("equipment created") end "deletes without javascript" equipment = factorygirl.create(:equipment) visit equipment_url expect { click_link "destroy" }.to change(equipment, :count).by(-1) expect(page).to have_content("equipment destroyed") end "edits equipment" equipment = factorygirl.create(:equipment) visit equipment_url click_link 'edit' fill_in "serial", with: "456789" click_button "update equipment" expect(page).to have_content("equipment updated") expect(page).to have_content("serial: 456789") end "shows equipment" equipment = factorygirl.create(:equipment) visit equipment_url click_link 'show' expect(page).to have_content("serial: rad123") expect(page).to have_link("edit") expect(page).to have_link("back", href: equipment_path) end end end errors
equipment /equipment adds new equipment (failed - 1) deletes without javascript (failed - 2) edits equipment (failed - 3) shows equipment (failed - 4) failures:
1) equipment /equipment adds new equipment failure/error: visit equipment_index_url
nomethoderror: undefined method `visit' #<rspec::examplegroups::equipment::getequipment:0x000000065c32e8> # ./spec/features/equipment_spec.rb:8:in `block (3 levels) in <top (required)>' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 2) equipment /equipment deletes without javascript failure/error: visit equipment_url
actioncontroller::urlgenerationerror: no route matches {:action=>"show", :controller=>"equipment"} missing required keys: [:id] # ./spec/features/equipment_spec.rb:23:in `block (3 levels) in <top (required)>' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 3) equipment /equipment edits equipment failure/error: visit equipment_url
actioncontroller::urlgenerationerror: no route matches {:action=>"show", :controller=>"equipment"} missing required keys: [:id] # ./spec/features/equipment_spec.rb:32:in `block (3 levels) in <top (required)>' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 4) equipment /equipment shows equipment failure/error: visit equipment_url
actioncontroller::urlgenerationerror: no route matches {:action=>"show", :controller=>"equipment"} missing required keys: [:id] # ./spec/features/equipment_spec.rb:42:in `block (3 levels) in <top (required)>' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' # /home/tom/.rvm/gems/ruby-2.3.1@rails5.0/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' finished in 0.28107 seconds (files took 2.61 seconds load) 4 examples, 4 failures failed examples:
rspec ./spec/features/equipment_spec.rb:5 # equipment /equipment adds new equipment rspec ./spec/features/equipment_spec.rb:21 # equipment /equipment deletes without javascript rspec ./spec/features/equipment_spec.rb:30 # equipment /equipment edits equipment rspec ./spec/features/equipment_spec.rb:40 # equipment /equipment shows equipment any ideas on how make work appreciated
i believe "rspec.describe "equipment", type: :request" has type ":feature" capybara testing work properly.
this should fix show errors, because assume doesn't have id because not visiting equipment_url correctly. if isn't problem, equipment#show not receiving instance variable.
Comments
Post a Comment