Rspec and Devise reset password
Не знаю, кому как, но, по-моему, я сегодня изобретал велосипед. Но что-то немного погуглив, я не нашёл никаких вразумительных примеров, как написать интеграционные тесты для проверки функционала восстановления пароля. Может это никому и не надо, но всё равно было интересно повозиться с этим.
В общем, вот, собственно, весь тест:
it "should have reset password" do
ActionMailer::Base.deliveries.clear
@user = FactoryGirl.build(:user, :email=>"none@ited.com.ua")
@user.send_reset_password_instructions()
@mail = ActionMailer::Base.deliveries.last
@host = ActionMailer::Base.default_url_options[:host]
@mail.should deliver_to(@user.email)
@mail.should deliver_from(Devise.mailer_sender)
@mail.should have_subject(/Reset password instructions/)
@mail.should have_body_text(/#{@user.email}/)
@reset_url_regexp = %r{<a href=\"http://#{@host}/edit_password}
@mail.should have_body_text(/#{@reset_url_regexp}/)
change_password_link = @mail.body.raw_source[/(http:\/\/.+\")/][0..-2]
visit change_password_link
page.should have_content "Новый пароль"
fill_in "user[password]", :with=> 'newpassword123'
fill_in "user[password_confirmation]", :with=> 'newpassword123'
click_button "Изменить"
page.should have_content("Dashboard")
end
end
Я не знаю, почему плагин так разрисовал код… Но у меня он именно такой.
Распишу, что же тут и как…
ActionMailer::Base.deliveries.clear
— тут очищаем очередь писем.
@user.send_reset_password_instructions()
— отсылаем письмо только что созданному пользователю с инструкциями, как восстановить пароль.
@mail = ActionMailer::Base.deliveries.last
— получаем последнее отосланное письмо
@host = ActionMailer::Base.default_url_options[:host]
— откуда оно было отослано
@mail.should deliver_to(@user.email)
— в письме должен быть корректный адрес получателя: пользователя, который был создан.
@mail.should deliver_from(Devise.mailer_sender)
— отправить должен быть наш Devise, как установлено в настройках.
@mail.should have_subject(/Reset password instructions/)
— тема письма тоже должна быть стандартной, если мы сами ничего не меняли.
@mail.should have_body_text(/#{@user.email}/)
— в теле письма опять же должен упоминаться пользователь, вернее, его электронная почта, для которого восстанавливается пароль.
- небольшая регулярка для проверки, что в теле письма есть ссылка на восстановление пароля
- проверка, что в теле письма есть данная ссылка
- получаем ссылку из тела письма
visit change_password_link
— переходим по этой ссылке
Ну а дальше уже всё просто: убеждаемся, что открылась нужная страница, заполняем новыми данными, и убеждаемся, что всё хорошо.
Не знаю, почему плагин так изуродовал код…..
Недавние записи
- Long time no see
- Ошибка при обновлении Meteor до версии 1.4.2
- Patch falcon для ruby-1.9.3-p327
- Ускоряем ruby и Rails
- Gem ‘seo_params’: определение основных параметров
- Отрицательный margin-top и Opera
- Rspec and Devise reset password
- Backbone.js: Views. Часть первая.
- Backbone.js: Models and Collections
- Backbone.js Routers