Как сделать тестовую интеграцию функций на основе отложенных заданий с огурцом?

Я хочу протестировать некоторые функции, которые требуют отложенных заданий для работы на огурце. Я определил следующий шаг:

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 заменяется реальным электронным письмом в этом тесте, и я ничего не получаю). Я подозреваю, что рабочий действительно не начинал. Что я должен проверить? Кстати, когда я тестирую в режиме разработки, я действительно получаю это письмо.

Спасибо

Редактировать:

Похоже, я получаю SQLite3:: BusyException:

SQLite3:: BusyException: база данных заблокирована: INSERT INTO "delayed_jobs" ....

Теперь, чтобы выяснить, почему и как я могу избавиться от этого! Любая идея? (помимо перемещения моей базы данных в PostgreSQL или mySQL).

Изменить: Хорошо, я перешел на 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' } 

1 ответ

Решение

Извините, но ответ - отойти от sqlite. Задержка задания блокирует базу данных, поэтому ваше приложение будет заблокировано.

Другие вопросы по тегам