2017-04-01 8 views
0

Rspec 테스트를 작성하는 데는 다른 기능이 있습니다. 하지만 여기서 문제가되는 것은 각 함수마다 동일한 구문을 사용하므로 각 테스트 사례에 대해 "예상"하는 붙여 넣기를 복사해야합니다. 내가 주장하는 것을 어떻게 쓸 수 있는지 한번 아시고 각 테스트 단계에 적용 하시겠습니까? 에서어떻게 반복적으로 테스트하지 않고 하나의 Rspec이 모든 테스트에 대해 어설 션을 실행할 수 있습니까?

보기 "기대 (지연 :: Job.count) .TO 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

실수로 두 번째 링크가 첫 번째 링크와 동일하다고 생각합니다. 나는 네가하는 말을 안다. 그러나 나는 사람들이 헬퍼 나 "애프터"블록에 "기대하다"라는 명령을 두는 것을 보지 못한다. –