2013-04-04 1 views
1

Имея некоторые трудности с моим тестированием Capysarara RSPEC, где у меня есть вложенный ресурс. Вот ошибка я получаю:Capybara + Rspec Вложенный маршрут

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

Мой вложенная маршрут выглядит следующим образом:

resources :mountains do 
    resources :photos 
    end 

И я проверяю следующее в моем 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 

Я считаю, что FactoryGirl является создавая все записи успешно. Вложение на фото выполняется через CarrierWave, и после отладки считают, что это правильно загружается.

include ActionDispatch::TestProcess 

FactoryGirl.define do 
    factory :user do 
    first_name 'Test' 
    last_name 'User' 
    email '[email protected]' 
    password 'password1' 
    password_confirmation 'password1' 
    # required if the Devise Confirmable module is used 
    confirmed_at Time.now 
    end 
    factory :region do 
    name 'Rockies' 
    end 
    factory :mountain do 
    name 'Breck Test' 
    region {|a| a.association(:region)} 
    description 'This is my testing mountain only' 
    end 
    factory :photo do 
    name 'My Photo Test' 
    description 'My lovely description' 
    mountain {|a| a.association(:mountain)} 
    image { fixture_file_upload(Rails.root + 'spec/fixtures/files/breck.jpg', "image/jpeg")} 
    end 
end 

Я очень ценю мудрость группы здесь, заранее за вашу помощь. Провел несколько разочаровывающих часов с этим кодом rspec сегодня, надеясь, что в будущем это станет легче.

ответ

0

Ваша проблема в том, что вы создали mountain, а затем photo, но они не связаны!

ли это вместо:

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

Спасибо за ваш ответ. Я пробовал приведенный выше код, но он не работает, он, похоже, фактически не создает фотографию в настройках FactoryGirl. Текущий файл FactoryGirl, который, как я думал, свяжет эти две записи, он делает это успешно между Region and Mountain, который был успешно протестирован с кодом, который я добавил к приведенному выше описанию –

+0

Кажется, я слишком быстро читал ваши заводы, только что отредактировал свой ответ – apneadiving

+0

Это! Большое спасибо :) –