ActionMailer Test, assert_equal из документации по Rails никогда не может быть правдой? - PullRequest
1 голос
/ 13 марта 2012

Я просматриваю Руководства по Rails 3 и смотрю раздел «Тестирование почтовых программ».

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

Это соответствующий раздел документации:

http://guides.rubyonrails.org/testing.html#testing-your-mailers

10.2.2 Базовый контрольный пример

В этом тесте @expected является экземпляром TMail :: Mail, который вы можете использовать в ваших тестах. Это определяется в ActionMailer :: TestCase. Тест выше использует @expected для создания электронного письма, которое оно затем утверждает с помощью электронного письма созданный заказным почтовиком. Приглашение является телом электронная почта и используется в качестве образца контента для утверждения. Помощник read_fixture используется для чтения содержимого этого файла.

Вот почему я думаю, что это так:

test_card_update_notification (CardSenderMailerTest) [/Users/victorstan/Sites/ContactMonkey/test/unit/card_sender_mailer_test.rb:21]:

<"Date: Mon, 12 Mar 2012 22:54:38 -0400\r\nFrom: ContactMonkey <support@contactmonkey.com>\r\nTo: test@contactmonkey.com\r\nMessage-ID: <4f5eb6ee903b3_710a3fd4d6034ec8484b1@Victor-Stans-MacBook-Pro.local.mail>\r\nSubject: Bob Smith's ContactMonkey Card Has Been Updated!\r\nMime-Version: 1.0\r\nContent-Type: text/plain;\r\n charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nHi Bob!\r\nYou asked to be notified when Bob Smith's card had been updated. You can view and download the new card by visiting their profile page:\r\n\r\nhttp://contactmonkey.com/bob\r\n\r\nUpdates at a glance:\r\n\r\n\tCard:\r\n\t\tTitle: Bauws\r\n\t\tOrganization: Fancy Org\r\n\t\tPersonal url: bob\r\n\r\n\tPhone:\r\n\t\tLabel: work\r\n\t\tNumber: 555 555 1234\r\n\r\n\tAddress:\r\n\t\tLabel: work\r\n\t\tStreet: 145 Dovercourt\r\n\t\tStreet2: \r\n\t\tCity: Toronto\r\n\t\tPostalcode: M6J3C5\r\n\t\tRegion: ON\r\n\t\tCountry: Canada\r\n\r\n\r\n\r\nMake it a great day!\r\nContactMonkey\r\n\r\nProblems? Write to us at support@contactmonkey.com, or just reply to this message.\r\nhttp://contactmonkey.com\r\n"> expected but was
<"Date: Mon, 12 Mar 2012 22:54:38 -0400\r\nFrom: ContactMonkey <support@contactmonkey.com>\r\nTo: test@contactmonkey.com\r\nMessage-ID: <4f5eb6eeaeae1_710a3fd4d6034ec848559@Victor-Stans-MacBook-Pro.local.mail>\r\nSubject: Bob Smith's ContactMonkey Card Has Been Updated!\r\nMime-Version: 1.0\r\nContent-Type: text/plain;\r\n charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nHi Bob!\r\nYou asked to be notified when Bob Smith's card had been updated. You can view and download the new card by visiting their profile page:\r\n\r\nhttp://contactmonkey.com/bob\r\n\r\nUpdates at a glance:\r\n\r\n\tCard:\r\n\t\tTitle: Bauws\r\n\t\tOrganization: Fancy Org\r\n\t\tPersonal url: bob\r\n\r\n\tPhone:\r\n\t\tLabel: work\r\n\t\tNumber: 555 555 1234\r\n\r\n\tAddress:\r\n\t\tLabel: work\r\n\t\tStreet: 145 Dovercourt\r\n\t\tStreet2: \r\n\t\tCity: Toronto\r\n\t\tPostalcode: M6J3C5\r\n\t\tRegion: ON\r\n\t\tCountry: Canada\r\n\r\n\r\n\r\nMake it a great day!\r\nContactMonkey\r\n\r\nProblems? Write to us at support@contactmonkey.com, or just reply to this message.\r\nhttp://contactmonkey.com\r\n">.

Заметили разницу?

Message-ID: <4f5eb6ee903b3_710a3fd4d6034ec8484b1@Victor-Stans-MacBook-Pro.local.mail>

VS

Message-ID: <4f5eb6eeaeae1_710a3fd4d6034ec848559@Victor-Stans-MacBook-Pro.local.mail>

Как я должен объяснить это? Насколько я знаю, это не часть моих данных или моего контроля.

Утверждение, которое я использую:

assert_equal @expected.encoded, CardSenderMailer.card_update_notification(card, followers, field_updates).encoded

Что очень похоже на тот, который используется в документации:

assert_equal @expected.encoded, UserMailer.create_invite('me@example.com', 'friend@example.com', @expected.date).encoded

Ответы [ 3 ]

1 голос
/ 09 сентября 2012

Это не красиво, но я делаю что-то вроде следующего:

test "able to mail something" do
    # bunch of @expected statements
    assert_equal encode(@expected), encode(MyMailer.mail(@user))
end  

def encode message
    message.encoded.gsub(/Message-ID: <.+>/, '').gsub(/Date: .+/, '')
end

Если вы хотите поделиться в тестах почтовой программы, измените test_helper.rb и добавьте:

class ActionMailer::TestCase
    def encode message
        message.encoded.gsub(/Message-ID: <.+>/, '').gsub(/Date: .+/, '')
    end
end
1 голос
/ 26 сентября 2012

Использование мокко для заглушки 'has_message_id?'имеет аналогичные результаты.В моем тесте я добавляю:

Mail::Message.any_instance.stubs('has_message_id?').returns(true)

0 голосов
/ 13 марта 2012

Я делаю тестовый проход с помощью .gsub(/Message-ID: <[\s\S]+>/, '')

Так что можно сделать утверждение:

assert_equal @expected.encoded.gsub(/Message-ID: <[\s\S]+>/, ''), CardSender.card_update_notification(card, followers, field_updates).encoded.gsub(/Message-ID: <[\s\S]+>/, '')
...