我尝试使用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>
答案 0 :(得分:2)
这看起来像一个懒惰的评估问题,在使用let
时很常见。来自documentation:
请注意,let是惰性求值的:直到第一次调用它定义的方法时才会对它进行求值。你可以用let!在每个例子之前强制调用方法。
因此,只有在您第一次调用它们时才会创建user
和other_user
,如果您已经渲染了页面,则为时已晚。尝试将let
来电切换为let!
并查看是否可以解决问题。
(虽然你说切换到user.name
很有意思,这很有趣。你能发布规范中的其他初始化代码吗?)