如何使用RSpec自定义匹配器进行多个'should have_selector'

时间:2013-07-04 21:22:16

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

正如您在阅读标题时所猜测的那样,我正在使用Rspec来测试我的RoR代码。在我的测试中,我想在一些操作后验证我在某个页面上,并验证该页面上是否存在某些元素。我使用以下代码:

# Show page title
it { should have_selector('title', text: "Button text") }

# Show form fields
it { should have_selector('input', id: "user_email") }
it { should have_selector('input', id: "user_password") }
it { should have_selector('input', id: "user_password_confirmation") }
it { should have_selector('input', value: "Schrijf me in") }

但在另一项测试中,我也想验证是否在同一页面上。我可以再次使用上面的代码,但感觉不对。

我想使用Rspec自定义匹配器来执行此操作。但是我能找到的唯一例子需要一个参数传递给匹配器或者只能验证一个选择器。如何编写自定义匹配器来执行此操作?

1 个答案:

答案 0 :(得分:1)

如果你的测试是相同的,你想要的是shared_examples

shared_examples 'on user home page' do
  # Show page title
  it { should have_selector('title', text: "Button text") }

  # Show form fields
  it { should have_selector('input', id: "user_email") }
  it { should have_selector('input', id: "user_password") }
  it { should have_selector('input', id: "user_password_confirmation") }
  it { should have_selector('input', value: "Schrijf me in") }
end

# Spec File #1
describe 'Test one' do
  it_behaves_like 'on user home page'
end

# Spec File #2
describe 'Test two' do
  it_behaves_like 'on user home page'
end