Проверка соответствия RSpec Mailer - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть следующий тест Rspec:

it "Password reset instructions" do
    user = Factory(:user)
    user.send_reset_password_instructions

    email = last_email

    email.body.encoded.should match(edit_user_password_url(:reset_password_token => user.reset_password_token))
end

Попытка сопоставить edit_password_url в почтовой программе

!!!
%html
  %head
    %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
  %body
    %h1 Hey #{@resource.first_name}
    %p Forget your password? Its cool-- it happens to the best of us.
    %p To reset the password to your TippingPress account, click the link below:
    %p= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token)
    %p If you didn’t request a password change, you can email us at support@tippingpress.com.
    %p Best,
    %p 
      Alex & Larson
      %br  
      = link_to "TippingPress.com", "http://www.tippingpress.com"

Я получаю следующую ошибку:

  1) UserMailer Password reset instructions
     Failure/Error: email.body.encoded.should match(edit_user_password_url(:reset_password_token => user.reset_password_token))
       expected "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>\r\n</head>\r\n<body>\r\n<h1>Hey Tester</h1>\r\n<p>Forget your password? Its cool-- it happens to the best of us.</p>\r\n<p>To reset the password to your TippingPress account, click the link below:</p>\r\n<p><a href=\"http://localhost:3000/users/password/edit?reset_password_token=8RMhiAxsRihME1mL7JiE\">Change my password</a></p>\r\n<p>If you didn’t request a password change, you can email us at support@tippingpress.com.</p>\r\n<p>Best,</p>\r\n<p>\r\nAlex & Larson\r\n<br>\r\n<a href=\"http://www.tippingpress.com\">TippingPress.com</a>\r\n</p>\r\n</body>\r\n</html>\r\n" to match "http://localhost:3000/users/password/edit?reset_password_token=8RMhiAxsRihME1mL7JiE"

Похоже, что два URL совпадают, я предполагаю, что это какая-то ошибка из-за моего недостатка знаний о REGEX или кодировке символов Заранее спасибо!

1 Ответ

9 голосов
/ 10 февраля 2012

Действительно, вы не передаете регулярное выражение в метод match, а просто строку.

Вам лучше сделать:

email.body.encoded.should include(edit_user_password_url(:reset_password_token => user.reset_password_token))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...