2016-05-06 12 views
1

capybara/rspecを使用してレールをテストする。現在のパスがIDで正しく生成されていることを確認したいのですが、作成したContact IDにアクセスできません。Capybara Rspec RailsがパスIDを取得

例期待: はlocalhost:3000 /コンタクト/ 27

例受け取っ: はlocalhost:3000 /コンタクト/

コードベース:

feature 'contacts' do 

    before do 
     visit '/' 
     click_link 'Sign up' 
     fill_in 'Email', with: '[email protected]' 
     fill_in 'Password', with: '123456' 
     fill_in 'Password confirmation', with: '123456' 
     click_button 'Sign up' 
     click_link 'Add a contact' 
     fill_in 'Firstname', with: 'John' 
     fill_in 'Surname', with: 'Jones' 
     fill_in 'Email', with: '[email protected]' 
     fill_in 'Phone', with: '223344' 
     attach_file('contact[image]', Rails.root + 'spec/mouse1.jpeg') 
     click_button 'Create Contact' 
    end 

context 'view a contact' do 
    scenario 'click contact to view details' do 
     click_link('Mouse1') 
     expect(page).to have_content 'John Jones 223344 [email protected]' 
     expect(page).to have_xpath("//img[contains(@src, \/html/body/a[2]/img\)]") 
     expect(page).to have_current_path(contact_path("#{@contact.id}")) 
    end 
    end 

補間が働いていない驚い以下を使用して、NilClassに対して未定義のエラーメソッド 'id'をスローします。明らかに、それはIDにアクセスできません。

@p = Contact.find_by_id(params[:id])でスワップアウトして、補間で@pを渡してみました。しかし、エラーをスローするundefined local variable or method params

アイデア/思考?

+0

ここで、変数@content.id'が定義されていますか? –

+0

こんにちは@ contacts_controller.rbのЗелёный。 – blastoff

+0

あなたの機能テストでコントローラからの_instance変数( '@ contact')に何がアクセスできるのか考えているのはなぜですか?できません。 –

答えて

3

機能テスト内からコントローラインスタンス変数にアクセスすることはできません。ただし、データベースにアクセスすることができ、あなたが唯一の最初または最後の本試験で一つのコンタクトを作成しましたので、動作するはずです -

expect(page).to have_current_path(contact_path("#{Contact.last.id}")) 

言われていること、ユーザーをサインアップするとき、あなたのテストUIを通じて連絡先を作成します既存の連絡先を表示できるかどうかをチェックするだけでは、機能テストのデータベースレコードを作成するだけでは意味がありません。おそらく、あなたのフィーチャーテストオブジェクトを作成するためのFactoryGirlの行に沿って何かを調べたいと思うでしょう。

関連する問題