2011-08-11 13 views
12

Actualmente cuando tengo un método de retraso en mi código como el siguiente:¿Cuál es la mejor manera de probar las cadenas retrayed_job con rSpec?

CommentMailer.delay.deliver_comments(@comment, true) 

escribo algo como esto en mi especificación:

dj = mock("DelayProxy") 
CommentMailer.should_receive(:delay).and_return(dj) 
dj.should_receive(:deliver_comments).with(comment, true) 

¿Hay una mejor manera de manejar esto y/o métodos encadenados como ese en rSpec en general?

Respuesta

27

Podemos sólo hay una línea más en el bloque antes de la siguiente manera:

CommentMailer.stub(:delay).and_return(CommentMailer) 

Luego puede tener la simulación normal compruebe la siguiente manera:

CommentMailer.should_receive(:deliver_comments).with(comment, true) 
+0

Uso de 'stub' de edad rspec-burla ': la sintaxis should' sin habilitar explícitamente la sintaxis es obsoleto en rspec-3. Esto parece funcionar 'expect (CommentMailer) .to receive (: delay) .and_return (CommentMailer)'. Si no quieres probarlo explícitamente, puedes usar 'allow' en lugar de' expect'. – Pete

0
describe '#perform' do 
    subject do 
     Delayed::Worker.delay_jobs = false 
     proc { worker.perform() } 
    end 

    it { is_expected.to change { ActionMailer::Base.deliveries.length }.by(2) } 
    end 

Conjunto trabajo retrasado como falso y u puede probarlo como sencillo

Cuestiones relacionadas