2017-02-20 74 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

您的測試看起來不錯。除非有嚴重的性能問題,否則我會放棄它。

嘗試讓你的蛋糕也吃掉它可能會讓你陷入困境,但我一直髮現它最好能夠抵制誘惑並保持測試代碼簡單易讀(或「表現力」)。

如果測試速度太慢,可考慮將多個示例合併爲一個並作出多種期望。這有損於測試報告,有利於提高測試速度。總是有一個權衡。