通过单个操作编写多个功能规范期望

时间:2015-04-30 07:16:44

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

所以我正在编写我的功能测试,它就是这样的,请注意[[place_holder]]

feature 'Accounts' do
  scenario 'creating an account' do
    # visit and fill form
    expect {
      click_button 'Create Account'
    }.to [[place_holder]]
    success_message = 'Your account has been successfully created.'
    expect(page).to have_content(success_message)
  end
end

现在我想以某种方式为这个块设置2个预期,这些预期是

change(User, :count).by(1)
change(Account, :count).by(1)

我有没有办法将这两个版本链接成一个,是的,我知道我可以对它的各个场景进行测试,但是代码太WET,不需要重复,并且功能规格开始很慢,不需要让我的测试套件变慢。

任何建议/替代方案都是适用的

2 个答案:

答案 0 :(得分:2)

从rspec 3.1开始,您可以使用具有块期望的复合匹配器表达式。

expect {
  click_button 'Create Account'
}.to change(User, :count).by(1).and change(Account, :count).by(1)

http://rspec.info/blog/2014/09/rspec-3-1-has-been-released/#expectations-block-matchers-can-now-be-used-in-compound-expressions

答案 1 :(得分:0)

由于数据可能会在每次测试运行之间被清除,您可以检查绝对值,例如

expect(User.count).to eq(1)
expect(Account.count).to eq(1)

我认为这更具可读性。