2017-04-01 34 views
0

我有不同的函數來編寫一個Rspec測試。但問題是,我試着在這裏測試,每個函數都有相同的語法,所以我必須複製每個測試用例的「期望」行的粘貼。你知道我該如何寫一次,期望斷言一次並適用於每個測試步驟?我如何使用一個Rspec期望斷言爲每個測試運行,而不重複自己?

看看 「預計(延遲:: Job.count)。爲了EQ(1)」 在下面的代碼:

it 'is able to send reminder email for submission deadline to signed-up users ' do 
    mail = DelayedMailer.new(@assignment.id, "submission", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type:  submission") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(1) 
    end 

    it 'is able to send reminder email for review deadline to reviewers ' do 
    mail = DelayedMailer.new(@assignment.id, "review", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type: review") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(1) 
    end 

    it 'is able to send reminder email for Metareview deadline to meta-reviewers and team members of the assignment' do 
    mail = DelayedMailer.new(@assignment.id, "metareview", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type: metareview") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(2) 
    end 

回答

2

你來到這裏兩個選擇:

1)請一個幫助方法,包裝邏輯:https://relishapp.com/rspec/rspec-core/v/3-4/docs/helper-methods/define-helper-methods-in-a-module

這一個唯一的缺點是,你將不得不調用方法,無論你想要它。

2)每個鉤後使用的:https://relishapp.com/rspec/rspec-core/v/3-4/docs/helper-methods/define-helper-methods-in-a-module

我不建議這一個,因爲它會每隔規範後字面上運行。

+0

我認爲你的第二個鏈接與第一個鏈接是錯誤的。我知道你在說什麼,但我沒有看到人們將「expect()...」命令放在助手或「之後」塊中。 –

相關問題