Der Aufruf der ActionMailer-Methode gibt während des rspec-Testens nil im Modul zurück

9

Ich habe eine Klasse ActionMailer

%Vor%

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?

    
link664 27.03.2012, 05:38
quelle

1 Antwort

16

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.

    
link664 28.03.2012, 01:45
quelle