ActiveDecoratorのRspecの書き方
こんにちは!kossyです!
さて、今回はDecoratorのRspecでのテストの書き方の例について、
ブログに残してみたいと思います。
環境
Rails 5.2.3
Ruby 2.6.3
draper 3.1.0
MacOS Mojave
書き方
とりあえずDecoratorのコードを載せます。
class MemberDecorator < Draper::Decorator delegate_all def show_sex sex == 'male' ? '男' : '女' end def administrate_display administrator == true ? '○' : '-' end def show_birthday birthday&.strftime('%Y年%m月%d日') end def age date = Date.today ((date.strftime('%Y%m%d').to_i - birthday.strftime('%Y%m%d').to_i) / 10000).to_s + '歳' end end
上記のコードのテストを書いてみます。
require 'rails_helper' RSpec.describe MemberDecorator, type: :decorator do describe 'MemberDecoratorに定義したメソッドが正しく動作すること' do describe 'show_sex' do describe 'sexがmaleの場合' do let(:member) { create :member, sex: :male } subject { member.decorate } it '男と表示される' do expect(subject.show_sex).to eq '男' end end describe 'sexがfemaleの場合' do let(:member) { create :member, sex: :female } subject { member.decorate } it '女と表示される' do expect(subject.show_sex).to eq '女' end end end describe 'administrate_display' do describe 'administratorがtrueの場合' do let(:member) { create :member, administrator: true } subject { member.decorate } it '○と表示される' do expect(subject.administrate_display).to eq '○' end end describe 'administratorがfalseの場合' do let(:member) { create :member, administrator: false } subject { member.decorate } it '-と表示される' do expect(subject.administrate_display).to eq '-' end end end describe 'show_birthday' do let(:member) { create :member } subject { member.decorate } it '%Y年%m月%d日と表示される' do expect(subject.show_birthday).to have_content '年' end end describe 'age' do let(:member) { create :member } subject { member.decorate } it '年齢が表示される' do expect(subject.age).to have_content '歳' end end end end
subjectを使ってテスト対象をモック化して、
decorateメソッドでdecoratorに定義したメソッドを使えるようにしています。
おおむねこんな感じで書けばいいんじゃないでしょうか(適当)