0

このテストが Rspec でパスしない理由を突き止めようとして、頭を壁にぶつけてきました。ブラウザで動作します。

Grade オブジェクトに属している Course フォームがあります。Course フォームには、ユーザーが Grade を選択できる選択ボックスがあります。

<%= form_for [current_user, @course] do |course| %>
...
<%= course.label :grade_id, "What age are the students?" %>
<%= course.collection_select(:grade_id, Grade.all, :id, :grade_level, options ={:prompt => "Select Grade"})  %>

Rspec での私のテストは次のようになります。

describe "A workign form" do
  before do
    sign_in_via_form #signs the user in
    visit new_user_course_path(@user) #references @user, defined in Helper
  end
let(:course){@user.courses}

  context "With valid information" do
    it "adds a course" do
      expect {
        fill_in 'course_name', with:'Course Name'
        select 'Fall', from: 'course_course_semester'
        select '2012', from: 'course_course_year'
        select 'Grade 5', from: 'course_grade_id'
        fill_in 'course_summary', with: 'Perfunctory Summary'
        fill_in 'course_objectives_attributes_0_objective', with: "an objective"
        click_button "submit"
     }.to change(course, :count).by(1)
    end
  end
...#other tests
end #describe block

私のフォームで生成された HTML は次のようになります。

<label for="course_grade_id">What age are the students?</label>
<select id="course_grade_id" name="course[grade_id]"><option value="">Select Grade</option>
    <option value="1">Kindergarten</option>
    <option value="2">Grade 1</option>
    <option value="3">Grade 2</option>
    <option value="4">Grade 3</option>
    <option value="5">Grade 4</option>
    <option value="6">Grade 5</option>
    <option value="7">Grade 6</option>
    <option value="8">Grade 7</option>
    <option value="9">Grade 8</option>
    <option value="10">Grade 9</option>
    <option value="11">Grade 10</option>
    <option value="12">Grade 11</option>
    <option value="13">Grade 12</option>
    <option value="14">High School</option>
</select>

他のコードが必要かどうか教えてください。喜んで提供させていただきます。私の他の選択ボックスは機能していますが、それらも配列が内容を駆動するモデルの一部です。ただし、この場合は、関連付けられたモデルがコンテンツを動かしています。それが重要かどうかはわかりません。

4

1 に答える 1

3

ドロップダウンのデータはデータベースから取得されます。Rails はテスト用に別個の DB を使用し、そのテーブルはデフォルトで空です。したがって、ドロップダウンにいくつかのオプションを表示するには、成績表にデータを入力する必要があります。

FactoryGirlを使用すると、次のようになります

FactoryGirl.define do
  factory :grade do
    sequence(:grade_level) { |n| "Grade #{n}" }
  end
end

そしてテスト

describe "A workign form" do
  before do
    sign_in_via_form #signs the user in
    FactoryGirl.create_list(:grade, 14) # fill the grades table before visit the page
    visit new_user_course_path(@user) #references @user, defined in Helper
  end
  ...
于 2012-12-14T16:48:24.297 に答える