ActionMailer E-Mail Versand testen

Ich habe soeben nach einer Möglichkeit gesucht, um den Versand einer E-Mail mittels ActionMailer in meinen Functional-Tests zu testen.
Beim Rails-Testing werden die E-Mails nicht real versandt, sondern nur in einer Queue gespeichert. Das ermöglicht es einfach den Inhalt der Queue abzufragen und somit den Versand der E-Mail sicher zu stellen.
Allerdings sollte auch bedacht werden, dass dadurch nur das reine Erstellen der E-Mail geprüft wird. Mögliche SMTP-Fehler beim Versand etc. bleiben dadurch unentdeckt!

  1. test "should send lost password mail" do
  2.  ActionMailer::Base.deliveries.clear
  3.  post(:lost_pwd, { :username => 'calvin', :email => 'calvin@krani.net' })
  4.  assert !ActionMailer::Base.deliveries.empty?    
  5. end

In diesem Beispiel soll geprüft werden, ob nach dem Aufruf der „Lost Password“ Action auch wirklich die E-Mail mit dem neuen Passwort generiert wird.
Hinweis: Es empfiehlt sich genauso wie in dem Beispiel, in jedem Test zunächst die Queue zu leeren, um sicher zu stellen, dass nicht schon E-Mails aus vorhergehenden Tests in der Queue stehen.

Share

Fehler „undefined method use_transactional_fixtures=“ nach Rails Update

Nach dem Update von Ruby on Rails auf die Version 2.3.5 habe ich beim Ausführen meiner Tests plötzlich diesen Fehler erhalten:

./test/test_helper.rb:22: undefined method `use_transactional_fixtures=' for Test::Unit::TestCase:Class (NoMethodError)

Mit Rails 2.3 hat sich der Name für die Klasse der Testhelper geändert. Um das Problem zu lösen, muss daher einfach in der Datei /test/test_helper.rb im jeweiligen Applikations-Verzeichnis der alte Klassenname

Test::Unit::TestCase.

durch

ActiveSupport::TestCase

ersetzt werden.

Share