酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

RSpecでprivate(プライベート)メソッドをテストする[Ruby][Rails]

Where?

RSpecでプライベートメソッドをテストするときの方法を見つけたので忘備録でメモ。


実装方法

ソースコード側は次の通りです。

test.rb
1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-
class Test
  def public_method
    "public/パブリック"
  end

  private
  def private_method
    "private/プライベート"
  end
end

RSpecのテストコード側は次の通りです。 Object#sendメソッド(Objectの持っているメソッドを呼び出す)を使えば、privateメソッドを呼び出せるようです!

test_rspec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*-
require_relative 'test'

describe Test do
  before(:each) { @sample = Test.new }

  context 'publicメソッドを呼び出す場合' do
    subject { @sample }
    its(:public_method) { should == "public/パブリック" }
  end

  context 'privateメソッドを呼び出す場合' do
    subject { @sample.send(:private_method) }
    # Object#sendはレシーバの持っているメソッドを呼び出す
    it { should == "private/プライベート" }
  end
end

Special Thanks

RSpecでprivateメソッドをテストする

おすすめの書籍