如何从使用Capybara填充的数据库下拉列表中选择一个值? [英] How do I select a value from a database populated dropdown with Capybara?
本文介绍了如何从使用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屋!
查看全文