Capybara无法看到控制器设置的变量

时间:2014-05-26 16:12:55

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

在我的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>

1 个答案:

答案 0 :(得分:1)

是的,Capybara使用与呈现给用户的相同界面与正在运行的服务器进行交互。当您访问Capybara中的页面时,如果您在浏览器中访问过,则会运行相同的代码。如果你的视图没有看到它应该的变量,那是因为它没有在动作中设置。

如果视图确实看到变量,但 Capybara 没有看到变量的结果,则可能是页面中的错误或错误你是如何在页面上寻找的,或者测试没有做任何必要的事情。