【问题标题】:How to test if all divs with class one has also class two in Rails integration test?如何在 Rails 集成测试中测试所有第一类的 div 是否也有第二类?
【发布时间】:2015-08-03 06:42:08
【问题描述】:

我想在我的 Rails 集成测试中进行测试,如果所有具有第一类的 div 也具有第二类,如果没有,则失败。

可能还有其他类,与本次测试无关。

这应该会通过:

<div class="one two">...</div>
<div class="one three two">...</div>
<div class="two one">...</div>

这应该会失败:

<div class="one two">...</div>
<div class="one three">...</div>
<div class="one">...</div>

谢谢!

【问题讨论】:

  • 根据您添加这两个类的原因,可能会有一些变通方法。如果是出于样式原因,为什么不将所有 CSS 规则放在第一类中呢?如果两者都是与 javascript 库集成的一部分,那么手动或使用 Webrat 或 Capybara 等浏览器测试库测试这些类的效果可能更有意义。

标签: ruby-on-rails ruby ruby-on-rails-4 testing integration-testing


【解决方案1】:

你可以使用 Capybara 来做到这一点。

let(:items) { page.find('div.one') }

it "items has both classes" do
  items.each do |item|
    expect(item[:class]).to match(/two/)
  end
end

【讨论】:

  • 谢谢,这可能有效,但我没有使用 Capybara。只需使用 Rails 附带的默认测试内容。如果它可以与给定的工具一起使用会很好..
  • 测试单元适用于模型和控制器级别的东西,但它不能很好地用于 DOM 级别的测试。您可能想尝试 Rspec 或 Capybara 来测试这种东西。
  • 好吧,不是我希望听到的答案,但它似乎是“正确”的答案,所以我接受它作为正确答案,谢谢!
  • 例如 Rails 5 正在删除 assert_template 之类的东西,但仍然保留 assert_select - 但这可能是对您的指示,如果您想在 DOM 级别上进行测试,迟早您将不得不使用一些外部依赖:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多