消除RSpec上下文中的重复代码

时间:2013-04-17 19:49:15

标签: ruby-on-rails rspec

这是我的rspec文件。我有PosRequest.authorize_card(@payment_detail)行3次。是否有一种DRYer方式来写这个上下文?

context 'should get' do 
    it 'error message' do 
      PosRequest.authorize_card(@payment_detail)
      @payment_detail.errorMsg.should_not eql(:nil)
    end
    it 'bank message' do 
      PosRequest.authorize_card(@payment_detail)
      @payment_detail.cardMsg.should_not eql(:nil)
    end
    it 'claim message' do 
      PosRequest.authorize_card(@payment_detail)
      @payment_detail.bankMsg.should_not eql(:nil)
    end
  end

2 个答案:

答案 0 :(得分:1)

context内,你可以使用已经建议的

before do
  do_something
end

对于此上下文中的所有测试只运行一次,或者您可以使用

before :each do
  do_something
end

这将在此上下文中针对每个测试运行一次do_something,您可以选择哪个更适合您的需求。

答案 1 :(得分:0)

context 'should get' do 
  before {PosRequest.authorize_card(@payment_detail)}

  it 'sends error message' do 
    @payment_detail.errorMsg.should_not eql(:nil)
  end
  it 'sends bank message' do 
    @payment_detail.cardMsg.should_not eql(:nil)
  end
  it 'sends claim message' do 
    @payment_detail.bankMsg.should_not eql(:nil)
  end
end

我对此进行了编辑以添加动词,以便您更清楚地了解每个规范的作用。