Im écrire un test pour un travailleur qui va chercher les courriels ne puis quelque chose avec eux:Stub Net :: POP3.start
Net::POP3.start('pop.gmail.com', 995, "xxx", "xxxx") do |pop|
if pop.mails.empty?
log "#{Time.now} No mail."
else
pop.each_mail do |mail|
#do something
end
end
end
Quelle est la meilleure façon de bouchonner Net::POP3.start
de telle manière qu'il retourner des données similaires devrait-il réellement fonctionner?
Merci
Dickie
Edit:
Le reste du travail/remplissant le #do something
ressemble un peu à ceci:
Net::POP3.start('pop.gmail.com', 995, "xxx", "xxxx") do |pop|
if pop.mails.empty?
log "#{Time.now} No mail."
else
pop.each_mail do |mail|
parse_mail mail.pop
end
end
end
def parse_mail(raw_email)
email = Mail.new raw_email
email.attachments
email.from
email.subject
end
La solution que je suis venu avec est (qui peut être un peu spécifique pour vos besoins):
Net::POP3.stub(:start).and_yield Net::POP3.new("a test string")
Net::POP3.any_instance.stub(:mails).and_return [Net::POPMail.new("test","test","test","test")]
Net::POPMail.any_instance.stub(:pop).and_return("a raw email string")
Ce que je n'aime pas vraiment.
Réécriture en utilisant certaines des techniques que @SteveTurczyn utilise.
Merci pour votre réponse. J'aurais probablement dû être plus clair dans ce que je faisais avec le mail. Je suis en train de traiter les pièces jointes à l'email. En fin de compte, ma solution n'était pas trop différente de la vôtre. Bien que je préfère la façon dont vous l'avez fait. Je poste ma solution puis une solution mise à jour. – DickieBoy