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" ).
如果测试速度太慢,请考虑将多个示例合并为一个并做出多个期望。这损害了测试报告,有利于提高测试速度。总有取舍。
让我解释一下这个问题...
我正在用 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" ).
如果测试速度太慢,请考虑将多个示例合并为一个并做出多个期望。这损害了测试报告,有利于提高测试速度。总有取舍。