Проверьте, содержит ли html тег изображения с.png файлом Ruby
Мое веб-приложение Ruby on Rails отправляет приветственное письмо клиентам, и я хочу написать тест, чтобы убедиться, что в письме есть тег, в котором src является файлом.png. Я видел, что assert_select может делать то, что я хочу, но так как мой адрес электронной почты Mail::Message
класс, я могу только взять HTML из электронной почты. Заранее спасибо за помощь!
2 ответа
Решение
Вот assert_select_email
от образцового Redmine:
assert_select_email do
assert_select 'a[href^=?]', 'http://localhost:3000/settings'
end
Все программисты Rails должны изучать литературу, такую как Redmine, чтобы выучить много полезных трюков.
# Extracts the body of an email and runs nested assertions on it.
#
# You must enable deliveries for this assertion to work, use:
# ActionMailer::Base.perform_deliveries = true
#
# assert_select_email do
# assert_select "h1", "Email alert"
# end
#
# assert_select_email do
# items = assert_select "ol>li"
# items.each do
# # Work with items here...
# end
# end
def assert_select_email(&block)
deliveries = ActionMailer::Base.deliveries
assert !deliveries.empty?, "No e-mail in delivery list"
deliveries.each do |delivery|
(delivery.parts.empty? ? [delivery] : delivery.parts).each do |part|
if part["Content-Type"].to_s =~ /^text\/html\W/
root = Nokogiri::HTML::DocumentFragment.parse(part.body.to_s)
assert_select root, ":root", &block
end
end
end
end
Я не уверен, что это работает, но я думаю, вы можете сделать что-то подобное.
expect(mail.body).to match(/.*.<img.*.png.*/)