Capybara不会从select中选择项目

时间:2013-05-31 09:17:01

标签: ruby-on-rails testing capybara

我正在使用Capybara测试我正在编写的一个小型Web应用程序。它拒绝从选择中选择正确的项目。这是代码:

  before do
    fill_in 'Assignment', with: "blah blah blah"
    select student.name, from: "assignment[student_id]"
  end

我在“来自”字段中尝试了所有支持的格式。我已经使用id,名称和标签文本来尝试选择正确的元素。我甚至在测试中启动了rails服务器,并在控制台中手动完成了测试中的步骤。不管我做什么,水豚都会踢回来:

cannot select option, no option with text 'John Doe' in select box 'assignment[student_id]'

如前所述,我已经在测试环境中启动了rails服务器,然后手动将用户添加到数据库中,就像我在测试中一样。我完全相信在选择框'作业[学生]中确实存在文本'John Doe'的选项。这让我相信我必须错误地使用select方法。有人可以开导我吗?

2 个答案:

答案 0 :(得分:0)

select from:是否需要选择字段名称或ID? 尝试使用ID(假设标准表单样式):

select student.name, from: "assignment_student_id"

如果检查select元素上的source,则可以确认字段ID。

它是否使用option元素的值而不是文本?再次,检查并看看" John Doe"是的,看看它是否适用于student.id。

select student.id, from: "assignment[student_id]"

最后,您是否尝试过包含该页面的文档中的语法?

page.select student.name, :from => 'assignment[student_id]'

答案 1 :(得分:0)

问题不在于选择代码。我忘记了FactoryGirl的工作方式。我通过Factory Girl创建的用户关系调用build,然后尝试通过let将结果分配给学生。不幸的是,因为let是懒惰的,所以它不是在需要时创建的,所以基本上在创建学生对象之前调用了页面。我将let语句中的代码移动到before,然后使用let和User.students.first分配给学生。