RSpec:控制器规范的多个断言

RSpec: Multiple asserts for a controller spec

让我解释一下这个问题...

我正在用 RSpec 测试一个 Rails 控制器,我有一个场景有大约 8 个断言..

我不喜欢 "it" 有那么多断言,所以我这样做了:

RSpec.shared_examples 'successful payment' do |term_type, years|
  let(:surgeon_package) { assigns(:surgeon).reload.last_surgeon_package }
  let(:payment)         { surgeon_package.payments.first }

  before do
    put(:update_account, params)
  end

  it 'package term must be yearly' do
    expect(surgeon_package.payment_term.term).to eq(1)
    expect(surgeon_package.payment_term.term_type).to eq(term_type)
  end

  it 'package payments must be one' do
    expect(surgeon_package.payments.count).to eq(1)
  end

  it '...'
end

但如您所见,我请求对每个它执行 :update_account 操作。

您认为解决此问题的最佳方法是什么?因为我不想每次都请求 /update_account。

全局变量? $缓存?将代码恢复为一个 "it" ?想法?

感谢社区

您的测试看起来不错。除非有严重的性能问题,否则我会保持原样。

可能很想把自己扭成一个结,试图既吃蛋糕又吃蛋糕,但我总是发现最好抵制诱惑并保持测试代码简单易读(或 "expressive" ).

如果测试速度太慢,请考虑将多个示例合并为一个并做出多个期望。这损害了测试报告,有利于提高测试速度。总有取舍。