1

キュウリで、遅延ジョブが必要ないくつかの機能をテストしたいと思います。次のステップを定義しました。

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 に移動する以外に)。

編集: OK、SQLite から PostgreSQL に移動しました。レコードは挿入されてDelayed::Jobいますが、メール テストは失敗します。

config/environments/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' } 
4

1 に答える 1

1

申し訳ありませんが、答えは sqlite から離れることです。ジョブが遅延するとデータベースがロックされるため、アプリが停止します。

于 2011-05-19T00:07:31.663 に答える