Comment tester ActionMailer deliver_later avec rspec

tentative de mise à niveau pour les Rails 4.2, à l'aide de delayed_job_active_record. Je n'ai pas mis le delayed_job backend pour l'environnement de test de la pensée de cette façon, les emplois d'exécuter tout de suite.

Je suis en train de tester le nouveau "deliver_later' méthode avec Rspec, mais je ne suis pas sûr de savoir comment.

Ancien contrôleur de code:

ServiceMailer.delay.new_user(@user)

Nouveau code de contrôleur:

ServiceMailer.new_user(@user).deliver_later

J'ai UTILISÉ pour tester de la sorte:

expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))

Maintenant j'ai des erreurs à l'aide que. (Double "mailer" a reçu le message inattendu :deliver_later avec (pas args))

Juste

expect(ServiceMailer).to receive(:new_user)

ne parvient pas trop à 'undefined method `deliver_later' for nil:NilClass'

J'ai essayé quelques-uns des exemples qui vous permettent de voir si les emplois sont mis en file d'attente à l'aide de test_helper dans ActiveJob mais je n'ai pas réussi à tester que la tâche est en attente.

expect(enqueued_jobs.size).to eq(1)

Ce passe si le test_helper est inclus, mais il ne me permet pas de le vérifier est le bon e-mail qui est envoyé.

Ce que je veux faire est:

  • test de l'e-mail correcte est mis en file d'attente (ou exécuté tout de suite dans l'essai env)
  • avec les paramètres corrects (@user)

Des idées??
grâce

InformationsquelleAutor bobomoreno | 2014-12-25