2016-11-02 2 views
0

Ich benutze Schienen 5.0.0.1, um ein kleines Inventartypsystem für einige Ausrüstung zu bauen, die ich zu Leuten einsam bin. Eines meiner Modelle heißt Ausrüstung, die natürlich ein unzählbares Modell ist (Singular und Plural von Ausrüstung ist das gleiche). Wenn ich versuche, Feature-Tests für dieses Modell zu schreiben, erhalte ich einen von zwei möglichen Fehlern, wenn ich versuche, die Indexseite zu besuchen. Wenn ich "besuche equipment_url" benutze, wird mir gesagt, dass es keine Route für "show" gibt, weil es keine ID gibt. Dies ist ein korrekter Fehler, wenn ich zur Show gehen wollte, aber ich nicht. Wenn ich versuche, "equipment_index_url" zu besuchen, wird mir gesagt, dass es keinen Methodenbesuch gibt.Unzählbare Modellprüfung mit rspec und capybara

Routes 
       Prefix Verb URI Pattern        Controller#Action 
        root GET /          inventory#index 
     delete_equipment GET /equipment/:id/delete(.:format)   equipment#delete 
         DELETE /equipment/:id/delete(.:format)   equipment#destroy 
     equipment_index GET /equipment(.:format)     equipment#index 
         POST /equipment(.:format)     equipment#create 
     new_equipment GET /equipment/new(.:format)    equipment#new 
     edit_equipment GET /equipment/:id/edit(.:format)   equipment#edit 
      equipment GET /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 GET /specialties/:id/delete(.:format)  specialties#delete 
         DELETE /specialties/:id/delete(.:format)  specialties#destroy 
      specialties GET /specialties(.:format)     specialties#index 
         POST /specialties(.:format)     specialties#create 
     new_specialty GET /specialties/new(.:format)    specialties#new 
     edit_specialty GET /specialties/:id/edit(.:format)   specialties#edit 
      specialty GET /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 GET /events/:id/delete(.:format)   events#delete 
         DELETE /events/:id/delete(.:format)   events#destroy 
       events GET /events(.:format)      events#index 
         POST /events(.:format)      events#create 
      new_event GET /events/new(.:format)     events#new 
      edit_event GET /events/:id/edit(.:format)    events#edit 
       event GET /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 GET /types/:id/delete(.:format)    types#delete 
         DELETE /types/:id/delete(.:format)    types#destroy 
       types GET /types(.:format)      types#index 
         POST /types(.:format)      types#create 
       new_type GET /types/new(.:format)     types#new 
      edit_type GET /types/:id/edit(.:format)    types#edit 
        type GET /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 GET /event_specialties/:id/delete(.:format) event_specialties#delete 
         DELETE /event_specialties/:id/delete(.:format) event_specialties#destroy 
    event_specialties GET /event_specialties(.:format)   event_specialties#index 
         POST /event_specialties(.:format)   event_specialties#create 
    new_event_specialty GET /event_specialties/new(.:format)  event_specialties#new 
    edit_event_specialty GET /event_specialties/:id/edit(.:format) event_specialties#edit 
     event_specialty GET /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 do 
    describe "GET /equipment" do 
    it "Adds a new equipment" do 
     @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 was successfully created") 
    end 

    it "deletes without javascript" do 
     equipment = FactoryGirl.create(:equipment) 
     visit equipment_url 
     expect { 
      click_link "Destroy" 
     }.to change(Equipment, :count).by(-1) 
     expect(page).to have_content("Equipment was successfully destroyed") 
    end 

    it "edits a equipment" do 
     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 was successfully updated") 
     expect(page).to have_content("Serial: 456789") 
    end 

    it "shows a equipment" do 
     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 

Fehler

Equipment 
    GET /equipment 
    Adds a new equipment (FAILED - 1) 
    deletes without javascript (FAILED - 2) 
    edits a equipment (FAILED - 3) 
    shows a equipment (FAILED - 4) 

Failures:

1) Ausrüstung GET/Ausrüstung Fügt eine neue Ausrüstung Ausfall/Fehler: besuchen Sie equipment_index_url

NoMethodError: 
    undefined method `visit' for #<RSpec::ExampleGroups::Equipment::GETEquipment:0x000000065c32e8> 
# ./spec/features/equipment_spec.rb:8:in `block (3 levels) in <top (required)>' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 

2) Ausstattung GET/Ausrüstung löscht ohne Javascript Ausfall/Fehler: 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/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 

3) Ausstattung GET/Ausrüstung bearbeitet eine Ausrüstung Failure/Fehler besuchen: besuchen 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/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:30:in `block (2 levels) in setup' 

4) Ausrüstung GET/Ausrüstung zeigt eine Ausrüstung an Störung/Fehler: besuch 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/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:112:in `block in run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `loop' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec/retry.rb:101:in `run' 
# /home/tom/.rvm/gems/[email protected]/gems/rspec-retry-0.5.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry' 
# /home/tom/.rvm/gems/[email protected]/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 to load) 
4 examples, 4 failures 

Fehlgeschlagen Beispiele:

rspec ./spec/features/equipment_spec.rb:5 # Equipment GET /equipment Adds a new equipment 
rspec ./spec/features/equipment_spec.rb:21 # Equipment GET /equipment deletes without javascript 
rspec ./spec/features/equipment_spec.rb:30 # Equipment GET /equipment edits a equipment 
rspec ./spec/features/equipment_spec.rb:40 # Equipment GET /equipment shows a equipment 

Alle Ideen, wie es sehr geschätzt

Antwort

0

wäre zu machen, arbeite ich glaube, dass die „RSpec.describe‚Equipment‘, Typ: Anfrage“ muss Geben Sie ": feature" ein, damit der Capybara-Test ordnungsgemäß funktioniert.

Dies sollte die Show-Fehler beheben, weil ich davon ausgehe, dass es keine ID hat, weil es equipment_url nicht korrekt besucht. Wenn das nicht das Problem ist, empfängt equipment # show keine Instanzvariable.

+0

Vielen Dank für das Abfangen. Eine Änderung macht jedoch keinen Unterschied. Was ich denke, ist, dass rspec die Show wählt, wenn es nicht sollte. Im Fall von unzähligen Modellen macht Schienen den Indx-Weg equipment_index, um ihn von den in der Show verwendeten Ausrüstungsrouten und anderen singulären Routen, die eine ID erfordern, zu unterscheiden. Die App funktioniert, wenn sie in einem Browser ausgeführt wird, aber rspec folgt den Routen nicht korrekt. – kd7cyu

+0

Ich stehe korrigiert. Dies hat das Problem behoben, wenn Sie equipment_index_url verwenden. Ich habe es gestern nicht gesehen, weil es einen anderen Fehler gibt und es vom Bildschirm verschoben wurde. – kd7cyu

+0

froh, dass ich helfen konnte! – LShapz

Verwandte Themen