【问题标题】:Capybara cannot see variable set by controllerCapybara 看不到控制器设置的变量
【发布时间】:2014-05-26 16:12:54
【问题描述】:

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

而我的 spec 看起来像这样:

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 的页面,是否会运行相应视图的操作,从而使变量对视图可见?

【问题讨论】:

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


    【解决方案1】:

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

    如果视图确实看到了变量,但是Capybara没有看到变量的result,这可能是页面的错误,或者是页面中的错误你是如何在页面上查找它的,或者测试没有做任何必要的事情让它出现。

    【讨论】:

    • 抱歉,考试太累了。该变量已在操作中正确设置。问题被证明是所有动态加载的 DOM 元素都不能立即用于 Capybara。我必须做一个find("#element_id").click_link "Linkname" 才能让 Capybara 等待它加载。
    • 很高兴问题解决了。对于未来的读者,您应该编辑您的问题以添加您正在使用 Javascript 驱动程序的线索,回答您自己的问题并接受它。
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多