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

时间:2017-02-20 12:10:18

标签: ruby-on-rails testing rspec tdd

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

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

我不想拥有"它"有这么多的断言所以我所做的就是:

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。

全局变量? $缓存?将代码返回到一个"它" ?想法?

感谢社区

1 个答案:

答案 0 :(得分:1)

你的测试看起来很好。除非存在严重的性能问题,否则我会将其保留原样。

可能很容易将自己扭曲成试图吃蛋糕并吃掉它的结,但我总是发现最好抵制诱惑并保持测试代码简单易读(或者#34;富有表现力&#34 )。

如果测试速度太慢,请考虑将多个示例合并为一个并产生多个期望。这会损害测试报告,有利于提高测试速度。总是需要权衡。