使用带有RSpec的Capybara 2填充下拉列表

时间:2014-03-17 12:51:41

标签: ruby-on-rails-3 rspec capybara

我正在使用带有Rspec的Capybara编写测试,我到达了必须选择下拉选项的步骤。下拉列表包含在开发环境中从数据库中检索的类别(对于某些活动)。在测试时,它们不再作为下拉列表中的选项出现。

如何在测试环境中填充下拉列表?

我有以下工厂:

FactoryGirl.define do
  factory :category do
    name { 'art' }
  end
end

FactoryGirl.define do
  factory :activity do
   title       { Faker::Lorem.sentence[0...Activity::MAX_TITLE_LENGTH] }
   description { Faker::Lorem.sentence }

   factory :full_activity do
     categories  { |pa| [ pa.association(:category) ] }
     venues      { [ FactoryGirl.build(:venue, :city => location) ] }
   end   
  end
end

在我的功能测试中有:

require 'spec_helper'

feature "add new activity", js: true do

  let(:category) { FactoryGirl.create(:category)}

  let(:activity) do
    FactoryGirl.create({
        venues: [FactoryGirl.create(:venue)]
    })
  end

  scenario "user fills step 1" do

      visit root_path

      click_on("Add activity")

      expect(page).to have_content("Categories")

      page.select 'art', :from => 'category_dd_id'

      page.find("#save_step_1").click
  end
end

在/models/activity.rb中:

has_and_belongs_to_many :categories

在/models/category.rb中:

has_and_belongs_to_many :activities

1 个答案:

答案 0 :(得分:1)

我设法通过添加 let!而不是来使测试工作顺利进行。 this question的答案帮助了我 有关让! here的更多信息。

let!(:category) { FactoryGirl.create(:category)}

let!(:activity) do
    FactoryGirl.create({
      venues: [FactoryGirl.create(:venue)]
  })