2017-02-20 79 views
2

让我解释一下这个问题......RSpec的:多用于断言控制器规范

我测试Rails控制器使用RSpec,我有一个场景,其中约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。

全局变量? $缓存?让代码回到一个“它”?想法?

感谢社区

+0

你为什么要多次调用'update_account'动作?为了不破坏测试数据,例如不更新一些记录?或者你有其他原因吗? – VAD

回答

1

您的测试看起来不错。除非有严重的性能问题,否则我会放弃它。

尝试让你的蛋糕也吃掉它可能会让你陷入困境,但我一直发现它最好能够抵制诱惑并保持测试代码简单易读(或“表现力”)。

如果测试速度太慢,可考虑将多个示例合并为一个并作出多种期望。这有损于测试报告,有利于提高测试速度。总是有一个权衡。