Everyday Rails - 8日目
10.その他のテスト
この章はコード部分がないので簡単に、テストが通るくらいの感じで。
Emailのテスト部分。
- spec/rails_helper.rb
# : require 'email_spec' RSpec.configure do |config| # : # Email Spec config.include EmailSpec::Helpers config.include EmailSpec::Matchers end
- Mailerテスト用にパスだけつくる
実際Actionなど無くてもパスは作れた
- config/routes.rb
get 'friendship/:user_id/:friend_id', to: 'users#edit_friendship', as: 'edit_friendship'
- Mailerを作る
./bin/rails g maier UserMailer friend_request
- app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base default from: "from@example.com" def friend_request(user, friend) @path = edit_friendship_path(user, friend) mail subject: "New friend request from #{friend.name}", to: user.email end end
- app/views/user_mailer/friend_request.text.haml
= @path
- spec/mailers/user_mailer_spec.rb
require "rails_helper" describe UserMailer, type: :mailer do describe 'friend_request' do let(:from) { "from@example.com" } let(:user) { create(:user) } let(:friend) { create(:contact) } let(:subject_text) { "New friend request from #{friend.name}" } let(:body_text) { edit_friendship_path(user, friend) } context 'use email spec' do before do UserMailer.friend_request(user, friend).deliver end it 'メールが送信されること' do expect(open_last_email).to have_subject subject_text expect(open_last_email).to be_delivered_to user.email expect(open_last_email).to be_delivered_from from expect(open_last_email).to have_body_text body_text end end context 'new mail object' do let(:mail) { UserMailer.friend_request(user, friend) } it 'メールが送信されること' do expect(mail.subject).to eq subject_text expect(mail.to).to eq [user.email] expect(mail.from).to eq [from] expect(mail.body.encoded).to match body_text end end end end
今日の感想
Emailの送信テストが簡単にできるのはいいね。
Email Specはcontrollerやfeatureのテストで使わないと意味が無さそう。
英語が分からないので、テスト名は日本語で書いちゃう。
英語勉強しよう。