Я понимаю, что этому вопросу год, но он указал мне на решение, которое другие могут найти полезным, поэтому я решил, что все равно опубликую его.
Я не полностью изучил email_spec
gem, упомянутый выше, так что это может быть гораздо более элегантный подход, но это хорошо работает для моего случая.В моем приложении мы разработали модификацию, позволяющую пользователям регистрироваться только с адресом электронной почты, затем они должны подтвердить свою учетную запись и получить дополнительную информацию.Поэтому мне нужно было проверить, что подтверждения работают.
Мой файл функций выглядит следующим образом:
Scenario: Confirm new account
Given I have registered for an account as "doe@nowhere.com"
When I follow the confirmation link in the confirmation email
Then I should be able to set a password
Сначала я добавил помощника last_email
в каталог поддержки огурцов как mailer_helper.rb
:
def last_email
ActionMailer::Base.deliveries.last
end
Во-вторых, я написал свои определения шагов следующим образом:
Given(/^I have registered for an account as "(.*?)"$/) do |user_email|
visit root_path
click_link 'register'
fill_in('Email', with: user_email)
click_button 'Sign up'
user = User.find_by_email(user_email)
user.should_not be_nil
user.confirmation_token.should_not be_nil
end
When(/^I follow the confirmation link in the confirmation email$/) do
ctoken = last_email.body.match(/confirmation_token=\w*/)
visit "/users/confirmation?#{ctoken}"
end
Then(/^I should be able to set a password$/) do
fill_in('user[password]', with: 'passw0rd')
fill_in('user[password_confirmation]', with: 'passw0rd')
fill_in('user[first_name]', with: 'John')
fill_in('user[last_name]', with: 'Doe')
click_button 'Activate'
page.should have_content('Your account was successfully confirmed. You are now signed in.')
page.should have_css('div#flash_notice.alert.alert-success')
end