Я хочу протестировать некоторые функции, которые требуют отложенных заданий для работы, на огурце. Я определил следующий шаг:
Given /^jobs are being dispatched$/ do
Delayed::Worker.new.work_off
end
Сейчас я пытаюсь проверить почтовые уведомления. Итак, у меня есть следующий сценарий:
Scenario: Receiving email when signing up
Given I am on the signup page
And I fill in "user[email]" with "test@test.com"
And I fill in "user[password]" with "password"
And I fill in "user[password_confirmation]" with "password"
And I press "Sign up"
Then I should be on the homepage
Given jobs are being dispatched
Then "test@test.com" should receive 1 emails
должен получать n писем шаг определяется как email_spec и определяется как:
Then /^(?:I|they|"([^"]*?)") should receive (an|no|\d+) emails?$/ do |address, amount|
unread_emails_for(address).size.should == parse_email_count(amount)
end
Тест не показывает, что я получаю 0 электронных писем (test@test.com заменяется реальным письмом в этом тесте, а я ничего не получаю). Я подозреваю, что рабочий действительно не начинал. Что я должен проверить? Кстати, когда я тестирую в режиме разработки, я действительно получаю это письмо.
Спасибо
Edit:
Похоже, я получаю SQLite3 :: BusyException :
SQLite3 :: BusyException: база данных заблокирована: INSERT INTO "delayed_jobs" ....
Теперь выясним, почему и как я могу от этого избавиться! Любая идея? (кроме перемещения моей базы данных в PostgreSQL или mySQL).
Edit:
Хорошо, я перешел на PostgreSQL из SQLite, записи вставляются в Delayed::Job
, но тесты электронной почты не пройдены.
Файл config / environment / test.rb содержит:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "mydomain.com",
:user_name => "name@mydomain.com",
:password => "mypassword",
:authentication => "plain",
:enable_starttls_auto => true
}
config.action_mailer.default_url_options = { :host => 'localhost:3000' }