Ich habe eine Klasse ActionMailer
Wenn ich UserMailer.submission_reminder(current_user)
in der Entwicklung anrufe, liefert es mir ein Mail::Message
-Objekt wie erwartet zurück.
Der Ort in meiner Anwendung, an dem diese Methode aufgerufen wird, befindet sich in einem Modul, das ich im lib-Ordner habe:
%Vor% Wenn ich TimesheetSubmissionNotifier.send_submission_reminders
in der Entwicklung anrufe, gibt UserMailer inmission_remind (user) die Mail-Nachricht zurück und deliver wird aufgerufen, alles funktioniert wie es sollte.
Das Problem ist, wenn ich TimesheetSubmissionNotifier.send_submission_reminders
über einen rspec-Test aufruft, gibt UserMailer.submission_reminder(user)
nil zurück.
Wenn ich UserMailer.submission_reminder(user)
direkt von einem rspec-Test aufruft, wird die Mailer-Nachricht wie erwartet zurückgegeben.
Hier sind die einzigen Zeilen, die zu ActionMailer in meiner config / environment / test.rb gehören:
%Vor%Irgendwelche Ideen, warum die Methode null zurückgibt?
Für diejenigen, die ein ähnliches Problem haben, habe ich das Problem gefunden.
Ich habe die should_receive
RSpec-Erwartung verwendet, von der ich nicht wusste, dass sie tatsächlich einen Schein der Klasse erzeugt hat, auf die sie gelegt wird. Also habe ich mich über die UserMailer-Klasse lustig gemacht, was bedeutete, dass sie niemals die eigentliche UserMailer-Klasse erreichte.
Ich konnte es nicht mit den Mock - Funktionen erreichen, also habe ich meinen Test geändert, um den UserMailer.deliveries
- Speicher zu überprüfen und zu überprüfen, ob die richtige Anzahl von Nachrichten dort eingefügt wird und an die gesendet wird richtige E-Mail-Adressen.
Tags und Links ruby-on-rails-3 ruby-on-rails rspec actionmailer