Testowanie układu świadczonych podczas wysyłania e-maile mogą być wykonywane w ramach badań kontrolerów wykorzystujących assert_template
.
Biorąc pod uwagę następujące klasy Mailer i sposób,
class Notifier < ActionMailer::Base
def password_reset_instructions(user)
@user = user
@reset_password_link = ...
mail(to: ..., from: ...., subject: "Password Reset Instructions") do |format|
format.html {render layout: 'my_layout'}
format.text
end
end
end
zresetować hasło e-mail zostanie wygenerowana za pomocą my_layout.html.erb
układ.
Ta metoda Mailer może być wywoływana w metodzie UsersController
, np:
class UsersController < ApplicationController
def forgot_password
user = ...
Notifier.password_reset_instructions(user).deliver_now
end
end
Oświadczenie assert_template layout: "my_layout"
w poniższym teście kontrolera dla users_controller#forgot_password
by zweryfikować układ używany:
class UsersControllerTest < ActionController::TestCase
test "forgot password" do
assert_difference 'ActionMailer::Base.deliveries.size', +1 do
post :forgot_password, email: @user.email
end
assert_response :redirect
assert_template layout: "my_layout"
assert_template "password_reset_instructions"
password_reset_email = ActionMailer::Base.deliveries.last
assert_equal "Password Reset Instructions", password_reset_email.subject
end
end
odpowiednie części z dziennika:
Started POST "https://stackoverflow.com/users/forgot_password"
Processing by UsersController#forgot_password as HTML
...
Rendered notifier/password_reset_instructions.html.erb within layouts/my_layout (1.1ms)
Referencje:
- Action Mailer Basics
- Testing Your Mailers - Functional Testing
- assert_template method
Hey Luke. A co z twierdzeniem, które wyraźnie renderuje szablon z zestawem arkuszy i porównuje tekst lub HTML z tym, co jest generowane (z dowolnym układem, który jest aktualnie określony)? Myślałem, że jeśli ktoś zmieni wartość układu w programie pocztowym później, test zakończy się niepowodzeniem. Nie próbowałem tego, ale czytałem ten test i miałem ten pomysł: https://github.com/rails/rails/blob/master/actionmailer/test/base_test.rb#L545 To powiedziawszy, wygląda na to, że jest musi być zmienną instancji z nazwą ukrycia ukrytą gdzieś, co możesz sprawdzić (lub dodać ją jako łatkę). –