Получить полнотекстовое содержание html-письма в RSpec - PullRequest
0 голосов
/ 26 апреля 2018

Как получить полнотекстовое содержимое html-письма в виде однострочной строки в rspec?

Допустим, это mail.html.haml:

%p 
  This product is worth: 
  = @amount
  So buy it now!

В rspecсначала я отправляю электронное письмо, а затем делаю это:

expect(ActionMailer::Base.deliveries.last.html_part.body).to include("This product is worth: €30 So buy it now")

или:

expect(ActionMailer::Base.deliveries.last.html_part.body.raw_source).to include("This product is worth: €30 So buy it now")

или:

expect(ActionMailer::Base.deliveries.last.html_part.body.raw_source).to have_content("This product is worth: €30 So buy it now")

Это не работает, потому что html выводит в rspecвот так:

 + This product is worth:
 + €30
 + So buy it now!

Так что мой оригинальный код верен, но я не могу взять его в rspec.Как мне объединить эти 3 строки в 1 одну строку, чтобы я мог правильно вызвать include или have_content?

* EDIT

Failure/Error:
       expect(ActionMailer::Base.deliveries.last.html_part.body.raw_source).to have_content(%q|This product is worth:
                                                                                               €30
                                                                                               So buy it now!|)

       expected        
       <p>
       This product is worth:
       €30
       So buy it now!
       Good luck!
       </p>

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Ответ был прост. HAML должен быть встроен так:

%p This product is worth: #{@amount} So buy it now!

или переменная должна быть интерполирована следующим образом:

%p 
  This product is worth: 
  #{@amount}
  So buy it now!
0 голосов
/ 26 апреля 2018

Как насчет:

expect(ActionMailer::Base.deliveries.last.html_part.body.raw_source).to have_content(
%q|This product is worth:
€30
So buy it now|)

Я бы не предложил изменять поиск, поскольку это технически сделает спецификацию неактуальной, поскольку соответствие не совсем совпадает с тем, что отображается.Вы можете разбить его, как указано выше, что спасет от побега контента.

Если у вас много таких тестов, вы можете сохранить ожидаемый результат в каком-либо хранилище данных (db / factory / yaml и т. Д.) И сравнить с ними.

...