Rails Rspec测试html选择选项

时间:2012-10-19 03:27:01

标签: ruby-on-rails testing rspec-rails

我尝试使用rspec来测试从select标签中选择一个值。 select标记应列出数据库中每个用户的所有名称。它在我浏览网站时有效。但测试似乎没有看到FactoryGirl创建的用户名:

错误是:

cannot select option, no option with text 'Person 4' in select box 'receiver_id'

以下是message_pages规范的一部分:

let(:user) { FactoryGirl.create(:user) }
let(:other_user) { FactoryGirl.create(:user) }
before do
    select other_user.name, :from => 'message[receiver_id]'
    fill_in "Subject", with: "Hello"
    fill_in "Body", with: "It's time to have fun!"
end 

这是我的观点的HTML输出:

<label for="message_receiver_id">Receiver</label>
<select id="message_receiver_id" name="message[receiver_id]"><optionvalue="12">John</option>
<option value="13">Tom</option>
<option value="9">Jay</option>
<option value="14">Bob</option></select>

1 个答案:

答案 0 :(得分:2)

这看起来像一个懒惰的评估问题,在使用let时很常见。来自documentation

  

请注意,let是惰性求值的:直到第一次调用它定义的方法时才会对它进行求值。你可以用let!在每个例子之前强制调用方法。

因此,只有在您第一次调用它们时才会创建userother_user,如果您已经渲染了页面,则为时已晚。尝试将let来电切换为let!并查看是否可以解决问题。

(虽然你说切换到user.name很有意思,这很有趣。你能发布规范中的其他初始化代码吗?)