在我的index
- 控制器中,我有以下代码:
def index
@categories = Category.all
end
视图的相关部分如下所示:
<% for c in @categories %>
<div id="location_radio">
<%= radio_button_tag "category", c.id %><%= c.name %>
</div>
<% end -%>
在浏览器中以这样的方式呈现:
<input checked="checked" id="category_1" name="category" type="radio" value="1">
我的规范看起来像这样:
describe "Find nearby location" do
it 'finds a location nearby the submitted address' do
@location = create(:location)
visit index_path
fill_in "search", :with => "Stortinget, Oslo"
choose "category_1"
click_button "Find Location!"
end
end
现在。问题是,当我尝试使用puts page.body
打印页面主体时,我可以看到单选按钮元素不存在。这让我相信永远不会创建由控制器生成的@categories
- 变量。
TL; DR :如果用户visit
使用Capybara页面,是否会运行相应视图的操作,从而使变量对视图可见?< / p>
答案 0 :(得分:1)
是的,Capybara使用与呈现给用户的相同界面与正在运行的服务器进行交互。当您访问Capybara中的页面时,如果您在浏览器中访问过,则会运行相同的代码。如果你的视图没有看到它应该的变量,那是因为它没有在动作中设置。
如果视图确实看到变量,但 Capybara 没有看到变量的结果,则可能是页面中的错误或错误你是如何在页面上寻找的,或者测试没有做任何必要的事情。