2013-05-31 48 views
0

我正在使用水豚测试我正在写一个小的Web应用程序。它拒绝从选择中选择正确的项目。代码如下:水豚不会选择项目从选择

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

我试过“from”字段中的所有支持的格式。我使用了id,名称和标签文本来尝试选择正确的元素。我甚至在测试中启动了Rails服务器,并在控制台中手动执行测试中的步骤。无论我做什么,水豚踢回:

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

如前所述,我已经踢了在测试环境中轨服务器,然后手动将用户添加到数据库中以同样的方式我已经在我的测试完成。我对选择框'作业[学生]'中的文字“John Doe”确实有一个选项的100%信心。这导致我相信我必须错误地使用select方法。有人能够启发我吗?

+0

您可以添加选择框的代码,只是要加倍确定。 – Matt

+0

尝试运行'all('#assignment [student_id]>选项')。each {| el |放入el.text(:all)}'来检查这个选项是否存在。 –

回答

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]' 
+0

如果'select'没有按名称查找元素,它将不会通过id找到它,因为[此方法支持其中任何一个](http://rubydoc.info/github/jnicklas/capybara/master/Capybara/节点/操作#选择-instance_method)。 –

+0

另外'select'只检查选项的文本,以便您的第二条建议也不正确。 –

0

问题不在于选择代码。我忘了FactoryGirl是如何工作的。我通过Factory Girl创建的用户关系调用了构建,然后尝试通过let将该结果分配给学生。不幸的是,既然let是懒惰的,当它需要的时候并没有被创建,所以基本上这个页面在学生对象创建之前就被调用了。我把我的let语句中的代码移动到之前,然后使用let和User.students.first分配给学生。