0

rails/rspec での関係とテストについて、まだ頭を悩ませようとしています。

Icon モデルに属しているモデル Quizzes を持ち、has_many quizzes を持つアプリがあります。

テストでデータを作成するために rspec/capybara と factory girl を使用して quiz/new ページで新しいクイズが作成されることをテストしようとしています。

ここに私のテストがあります..

 describe "new quiz page" do

    let(:user) { FactoryGirl.create(:user) }
    let(:icon) { FactoryGirl.create(:icon) }

    before do
        sign_in user
        visit new_quiz_path
    end 

    ....

    describe "with valid info" do
      before do
        fill_in "Title",         with: "Example title"
        fill_in "Description",  with: "Example quiz description"
        select icon.title,              from: "quiz_icon_id"
      end

      it "should create new content" do
        expect { click_button submit }.to change(Quiz, :count).by(1)
      end
    end
end

私が得ているrspecエラーは...

     Failure/Error: select icon.title,              from: "quiz_icon_id"
 Capybara::ElementNotFound:
   cannot select option, no option with text 'Icon 1' in select box 'quiz_icon_id'

したがって、明らかに問題は、選択できるアイコンがないことです。タイトルを見つけることはできますが、テストフォームでは複製されないため、1つは間違いなくファクトリーガールメソッドで作成されています. これを機能させる方法が頭に浮かびません。

誰かがここでいくつかの指針を提供できますか?

ありがとう、マーク。

4

1 に答える 1

0

save_and_open_page のヒントをありがとう @Dty。それは私が問題をデバッグするのに役立ちました。

アイコンが作成されていないか、少なくともテストがページで実行されているときに存在しませんでした。

解決するために、let(:icon) ステートメントの代わりにこれを行いました。

before(:all) { 1.times {  FactoryGirl.create(:icon) } }
after(:all) { Icon.delete_all }

次に、テストがフォームに入力されたときに、Icon.first.title を使用しました。

before do
   fill_in "Title",         with: "Example title"
   fill_in "Description",  with: "Example quiz description"
   select Icon.first.title,         from: "quiz_icon_id"
end

以前の「let」ステートメントではなく、アイコンを作成するために before(:all) ステートメントを使用しなければならなかった理由がよくわかりません。なぜこれが当てはまるのかを誰かが示唆できれば、それはありがたいことです。

于 2012-07-17T21:40:52.637 に答える