0

我正在使用 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 服务器,然后以与我在测试中相同的方式手动将用户添加到数据库中。我 100% 确信在选择框“作业[学生]”中确实有一个带有文本“John Doe”的选项。这让我相信我一定是错误地使用了 select 方法。有人可以启发我吗?

4

2 回答 2

0

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

select student.name, from: "assignment_student_id"

如果您在选择元素上检查源,则可以确认字段 ID。

它是否使用选项元素的值而不是文本?再次检查并查看“John Doe”的值是什么,并通过使用 student.id 查看它是否有效。

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

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

page.select student.name, :from => 'assignment[student_id]'
于 2013-05-31T09:40:06.777 回答
0

问题不在于选择代码。我忘记了 FactoryGirl 的 let 是如何工作的。我通过 Factory Girl 创建的 User 调用 build through a relationship,然后尝试通过 let 将该结果分配给 student。不幸的是,因为 let 是惰性的,它并没有在需要的时候被创建,所以基本上页面在学生对象被创建之前就被调用了。我将 let 语句中的代码移到 before 中,然后使用 let 和 User.students.first 分配学生。

于 2013-05-31T21:24:00.987 回答