如何从使用Capybara填充的数据库下拉列表中选择一个值? [英] How do I select a value from a database populated dropdown with Capybara?

查看:72
本文介绍了如何从使用Capybara填充的数据库下拉列表中选择一个值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个模型:场地和活动。地点has_many:事件和事件所属地点:地点。

I have 2 models: Venue and Event. Venue has_many :events and Event belongs_to :venue.

我的事件/新表单具有以下字段

My events/new form has the following fields


  • 日期(用当前日期填充)

  • 时间(用当前时间填充)

  • 标题(空)

  • 场地(使用开发数据库中的场所表填充)

  • Date (populated with current date)
  • Time (populated with current time)
  • Title (empty)
  • Venue (populated with venues table from development database)

现在我正在尝试使用RSpec对此进行测试和水豚。这是我的功能:

Now I'm trying to test this with RSpec and Capybara. Here's my feature:

require 'spec_helper'

feature "Events" do
  let(:venue) { FactoryGirl.create(:venue) }
  let(:event) { FactoryGirl.create(:event, venue: venue) }

  scenario "Creating event as guest" do
    visit root_path
    click_link "Submit Event"
    fill_in "Title", with: event.title
    click_button "Submit"
    expect(page).to have_content("Event has been created.")
    expect(page).to have_content(event.title)
  end
end

我的工厂看起来像这样:

My factories look like this:

FactoryGirl.define do
  factory :event do
    date "2014-02-27"
    time "10:00am"
    title "Slayer"
  end
end

FactoryGirl.define do
  factory :venue do
    name "Example Venue"
    url "http://www.example.com"
    address "123 Main St., Chicago, IL"
  end
end

当我r在此规格下,我收到以下错误:

When I run this spec I get the following error:

 Failure/Error: click_button "Submit"
 ActionView::Template::Error:
   Couldn't find Venue without an ID

我猜这有

推荐答案

使用来解决这个问题? let 是惰性的,因此您的数据库调用将在此处执行:

using let is lazy, so your database call will get executed here:

  scenario "Creating event as guest" do
    visit root_path
    click_link "Submit Event"
    fill_in "Title", with: event.title # <------------------- evaluated!
    click_button "Submit"
    expect(page).to have_content("Event has been created.")
    expect(page).to have_content(event.title)
  end

您可能想要的是:

feature "Events" do
  background do
    @event = FactoryGirl.create(:event, venue: FactoryGirl.create(:venue))
  end

  scenario "Creating event as guest" do
    visit root_path
    click_link "Submit Event"
    fill_in "Title", with: @event.title
    click_button "Submit"
    expect(page).to have_content("Event has been created.")
    expect(page).to have_content(@event.title)
  end
end

您还可以使用 let!执行直接,但是我认为设置块更加清晰。

you could also use let! which executes directly, but i think the setup block is much clearer.

这篇关于如何从使用Capybara填充的数据库下拉列表中选择一个值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆