4

現在、私の開発環境では、使用ActionMailer::Base.deliveries後にテーブルに何も表示されませんmail。足りない設定はありますか?

config / environment / development.rb :
config.action_mailer.delivery_method = :test

app / mailers / notifier.rb

def send_email(user)
  mail(:to => user.email, :subject => "Welcome to our website!")
end

これらは私が実行しているテストです:

When /^I signup$/ do
  visit signup_path
  @user = FactoryGirl.build(:user)
  fill_in "user_email", :with => @user.email
  fill_in "user_password", :with => @user.password
  click_button "Join now"
end

Then /^I should receive a confirmation email$/ do
  email = ActionMailer::Base.deliveries.last
  email.subject.should == "Welcome to our website!"
end

現在、このI should receive a confirmation emailステップ で次のエラーが発生します。undefined method subject for nil:NilClass (NoMethodError)

ありがとう!

4

4 に答える 4

10

別の可能性は、config / environment/test.rbにある可能性があります

config.action_mailer.delivery_method = :test

しかし、あなたは設定しました

config.action_mailer.perform_deliveries = false

に変更します

config.action_mailer.perform_deliveries = true

私の場合、それを再び機能させました。

于 2012-12-14T12:25:17.047 に答える
2

古い質問ですが、いくつか頭に浮かぶことがあります。

  • 開発環境の構成について話しますが(config/environments/development.rb)、機能していないのはテストです。チェックconfig/environments/test.rbして多分config\application.rb

  • 私は実際に開発環境で電子メール配列を見たかったのですが、コンソールでは常にnilを返しました。配列はデータベースではなく単なるメモリオブジェクトであるため、コンソール(rails c)はサーバー(rails s)で何が起こっているかを確認できないことにようやく気づきました。ビューに追加<%= ActionMailer::Base.deliveries.count %>すると、開発中に配列が読み込まれるのをすぐに確認できました。

  • 別のスレッドまたはタスクを使用して電子メールを送信している場合は、別の「コンソールからそのプロセスを確認できません」という状況が発生します。を使用delayed_jobすると、この回答Delayed::Job.last.handlerは、を使用して(実際の電子メールではなく)ジョブを確認できることを示唆していることがわかりました。これデータベースを確認するため、プロセス間で機能します。ただし、これは、ジョブがまだデータベースにある間、つまりワーカーがジョブを処理する前にのみ機能します。

于 2014-04-10T01:01:29.370 に答える
0

あなたが得ているエラーは、電子メールがゼロであることを示しています。つまり、deliverys.lastメソッドは、電子メールが含まれていないため、nilを返します。

いくつかの理由が考えられます...テストメカニズムとしてキュウリを使用していると思いますか?

1.「click_button」が送信することを確認します

putsまたはlogステートメントを入れてみることができます。きゅうり機能を実行すると、実際に印刷されることを確認してください。フロントエンドロジックが機能せず、テストが正しく失敗するため、これらが機能しない場合があります。つまり、トリガーされると予想されるコントローラーエンドポイントはトリガーされていません。

2.「send_email」が正しいことを確認します-単体テストを使用します

次に、実際にメールを送信していることを確認します。これが機能することを確認するための単体テストを作成します。これは、すばやく簡単に実行できるはずです。そこにたくさんの記事。

最後に、実際には関連していませんが、車輪の再発明をする必要がないように、いくつかの優れたテスト方法を提供する電子メール仕様を使用することをお勧めします。

于 2012-05-16T04:37:57.387 に答える
0

@Dominik Steinerが回答した変更を行った後、それでも機能しない場合は、

もう1つの可能性は、config / initializers /mailer.rbに次のようになっていることです。

ActionMailer::Base.delivery_method = :test

上記は私の場合は欠落していて、今は機能しました。

于 2018-01-15T07:32:13.707 に答える