メーラを自分のアプリケーションでテストして、自分がしたいことをしていることを確認します。Rails 5 - アプリケーションメーラのテスト
class LessonMailer < ApplicationMailer
def send_mail(lesson)
@lesson = lesson
mail(to: lesson.student.email,
subject: 'A lesson has been recorded by your tutor')
end
end
これは、私が「send_mail」メソッドは、私はそれはしかし、私はこのエラーを取得していますしたい方法を動作していることをテストしたいスペック/メーラーディレクトリに
require "rails_helper"
RSpec.describe LessonMailer, :type => :mailer do
describe "lesson" do
let(:student){ FactoryGirl.create :user, role: 'student', givenname: 'name', sn: 'sname', email: '[email protected]' }
let(:lesson ){ FactoryGirl.create :lesson, student_id: 2 }
let(:mail ){ LessonMailer.send_mail(lesson).deliver_now
it "renders the headers" do
expect(mail.subject).to eq("A lesson has been recorded")
expect(mail.to).to eq(["[email protected]"])
expect(mail.from).to eq(["[email protected]"])
end
it "renders the body" do
expect(mail.body.encoded).to match("A lesson form has been recorded")
end
end
end
私のテストです。この問題を解決するにはどうしたらいいですか?ありがとうございました。
NoMethodError:
undefined method `email' for nil:NilClass
# ./app/mailers/lesson_mailer.rb:4:in `send_mail'
返信いただきありがとうございます。私はあなたのソリューションを実装したときにエラーが発生します。 NoMethodError: 未定義メソッド 'email for nil:NilClass #./app/mailers/lesson_mailer.rb:4:in' send_mail ' この問題を解決するにはどうすればよいですか。 –
工場を導入していますか? 'email'属性を持つ' student'ファクトリを持っていますか? 'NilClass'エラーは面白いです。なぜなら' .email'を呼び出すことを試みている 'student'がないからです。したがって、生徒がインスタンス化されていることと、それが 'email'属性を持っていることを確認する必要があります。工場を作るための参考資料は次のとおりです。https://github.com/brennovich/cheat-ruby-sheets/blob/master/factory_girl.md –
ありがとうございました。ついにそれを解決しました。 student_idのレッスンのために工場をセットアップする方法が問題でした。 –