64 votes

La compensation ActiveMailer:Base.les livraisons après RSpec test

J'ai le texte suivant RSpec test pour mon UserMailer classe:

require "spec_helper"

describe UserMailer do
  it "should send welcome emails" do
    ActionMailer::Base.deliveries.should be_empty
    user = Factory(:user)
    UserMailer.welcome_email(user).deliver
    ActionMailer::Base.deliveries.should_not be_empty
  end
end

Ce test passé la première fois, mais pas la deuxième fois que j'ai couru. Après avoir fait un peu de débogage, il apparaît que le 1er test a ajouté un élément à la ActionMailer::Base.les livraisons de tableau, et que le point ne l'ai jamais nettoyé. Que les causes de la première ligne dans le test à l'échec depuis le tableau n'est pas vide.

Quelle est la meilleure façon de nettoyer les ActionMailer::Base.les livraisons de tableau après un RSpec test?

95voto

Beerlington Points 25012

Depuis SUIS::Base.les livraisons est juste un tableau, vous pouvez initialiser un tableau vide. Vous pouvez vous débarrasser de la première vérifiez qu'il est bien vide trop:

describe UserMailer do
  before { ActionMailer::Base.deliveries = [] }

  it "should send welcome emails" do
    user = Factory(:user)
    UserMailer.welcome_email(user).deliver
    ActionMailer::Base.deliveries.should_not be_empty
  end
end

11voto

d_rail Points 2074

Comme Andy Lindeman souligne, la compensation de la livraison est effectuée automatiquement pour mailer tests. Cependant, pour les autres types, il suffit d'ajouter , :type => :mailer pour l'emballage de bloc à force de le même comportement.

describe "tests that send emails", type: :mailer do
  # some tests
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X