【问题标题】:Rspec/Capybara matching data across rows and columnsRspec/Capybara 跨行和列匹配数据
【发布时间】:2015-09-20 15:40:01
【问题描述】:

我的 HTML 看起来像这样:

<div class="row">
  <div class="column">
    Customer Alice
  </div>
  <div class="column">
    Status: enrolled / signed
  </div>
</div>
<div class="row">
  <div class="column">
    Customer Boris
  </div>
  <div class="column">
    Status: signed
  </div>
</div>

在跨行和跨列匹配方面遇到一些挑战。

在使用 Rspec/Capybara 时,我会更新 Boris 的详细信息,以便他的状态变为 enrolled / signed,即

<div class="row">
  <div class="column">
    Customer Alice
  </div>
  <div class="column">
    Status: enrolled / signed
  </div>
</div>
<div class="row">
  <div class="column">
    Customer Boris
  </div>
  <div class="column">
    Status: enrolled / signed
  </div>
</div>

这很容易被人在屏幕上直观地确认。

由于我正在使用 Capybara 和 Poltergeist :),我如何轻松匹配以确认 Boris 的状态预期为规范的 enrolled / signed

【问题讨论】:

  • 你试过了吗?
  • 我开始将生成的数据嵌入到 div 的 HTML 中(例如,Boris 的enrolled / signed 的列 div 具有我可以选择然后匹配的数据或 id 属性。这似乎涉及所以想知道是否有更惯用的方法(特别是因为我也是 Rspec/Capybara 的新手)。
  • 你试过写测试吗? Stackoverflow 不是为你编写代码。这可以帮助启动ruby-journal.com/how-to-write-rails-view-test-with-rspec

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


【解决方案1】:

类似

row = find('.row', text: 'Customer Boris')
expect(row).to have_text('enrolled')

会做你想做的 - 如果你想一次性完成,你可以传递一个正则表达式来匹配文本

expect(page).to have_selector('.row', text: /Customer Boris.*enrolled/)

或者类似的东西

【讨论】:

  • 感谢@tom-walpole :) 我最终采用了正则表达式方法,因为我的实际 HTML 嵌套更重(React)并且更模糊。仍然对 Rspec 方法有所了解。
猜你喜欢
  • 2011-07-23
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多