2015-05-01 29 views
5

EnvironmentSzyny 4, RSpec 3.2 - jak makieta metodę deliver_now ActionMailer by podnieść wyjątki

Ruby 2.2.1, Rails 4.2.0 rspec-core 3.2.2 rspec-oczekiwania 3.2.0, rspec-mocks 3.2.1, 3.2.1 rspec barierki, rspec-Support 3.2.2

mam następujący sposób

def send_event_alert_email(event_id) 
    event = Event.find_by(id: event_id) 
    ... 
    ...  
    ... 
    EventAlertMailer.event_alert(event_id).deliver_now 

    create_alert(event) 
end 

muszę napisać specyfikację, która zapewnia, że ​​create_alert(event) nie zostanie wywołana, gdy EventAlertMailer.event_alert(event_id).deliver_now podnosi wszelkie wyjątki. Podstawowym pytaniem jest więc, w jaki sposób mogę symulować deliver_now, aby podnieść możliwe wyjątki, które może on faktycznie rzucić.

Odpowiedz

5

Oto jak testować deliver_now metody:

describe EventAlertMailer do 
    it 'sends email' do 
    delivery = double 
    expect(delivery).to receive(:deliver_now).with(no_args) 

    expect(EventAlertMailer).to receive(:event_alert) 
     .with(event_id) 
     .and_return(delivery) 

    MyClass.send_event_alert_email 
    end 
end