2013-04-04 3 views
1

Avoir quelques difficultés avec mes tests Capybara RSPEC où j'ai une ressource imbriquée. Voici l'erreur que je reçois:Capybara + Rspec Route imbriquée

1) Photo pages visit photo path Photo can be visited after FactoryGirl create records ←[31mFailure/Error:←[0m ←[31mvisit mountain_photo_path(mountain, photo)←[0m

←[31mActiveRecord::RecordNotFound:←[0m 
    ←[31mCouldn't find Photo with id=1 [WHERE "photos"."mountain_id" = 1]←[0m 

←[36m # C:in find'←[0m ←[36m # ./app/controllers/photos_controller.rb:14:in show'←[0m ←[36m # ./spec/requests/photo_pages_spec.rb:34:in `block (3 levels) in '←[0m

Mon parcours imbriquée est la suivante:

resources :mountains do 
    resources :photos 
    end 

Et je teste les éléments suivants dans mon test Rspec:

require 'spec_helper' 

describe "Photo pages" do 
    let(:user) { FactoryGirl.create(:user)} 
    let(:region) { FactoryGirl.create(:region)} 
    let(:mountain) {FactoryGirl.create(:mountain)} 
    let(:photo) {FactoryGirl.create(:photo)} 

    before { sign_in user } 

    describe "visit mountain path" do 
     it "can be visited after FactoryGirl create" do 
      visit mountain_path(mountain) 
      page.should have_selector('h1', text: "Breck Test") 
     end 
    it "has the correct region associated to it" do 
     visit mountain_path(mountain) 
     page.should have_selector('h4', text: "Rockies") 
    end 
    end 


    describe "visit photo path" do 
     it "Photo can be visited after FactoryGirl create records" do 
      visit mountain_photo_path(mountain, photo) 
      page.should have_selector('title', text: photo.name) 
     end 
    end 

end 

Je crois factorygirl est créer tous les enregistrements avec succès. La pièce jointe sur Photo est effectuée via CarrierWave et après le débogage, elle est considérée comme correctement chargée. J'apprécie énormément la sagesse du groupe ici, merci d'avance pour votre aide. Passé plusieurs heures frustrantes avec ce code rspec aujourd'hui, en espérant que cela devienne plus facile dans le futur.

Répondre

0

Votre problème est que vous créez un mountain, puis un photo mais ils ne sont pas liés!

Pour ce faire, à la place:

require 'spec_helper' 

describe "Photo pages" do 
    let(:user) { FactoryGirl.create(:user)} 
    let(:region) { FactoryGirl.create(:region)} 
    let(:mountain) { FactoryGirl.create(:mountain)} 
    let(:photo) { FactoryGirl.create(:photo, mountain: mountain) } 

    before { sign_in user } 

    describe "visit photo path" do 
    it "Photo can be visited after FactoryGirl create records" do 
     visit mountain_photo_path(photo.mountain, photo) 
     page.should have_selector('title', text: photo.name) 
    end 
    end 
end 
+0

Merci pour votre réponse. J'ai essayé le code ci-dessus, mais cela ne fonctionne pas, il ne semble pas réellement créer une photo dans les paramètres FactoryGirl. Le fichier FactoryGirl actuel je pensais relier ces deux enregistrements, il le fait avec succès entre Région et Montagne, qui a été testé avec succès avec le code que j'ai ajouté à la description ci-dessus –

+0

semble que j'ai lu vos usines trop vite, édité juste ma réponse – apneadiving

+0

il! Merci beaucoup :) –