やったこと
rspec で and_call_original を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
$ gem list | grep rspec-rails
rspec-rails (3.8.2)
調査
spec/models/task9_spec.rb
require 'rails_helper'
class Sample
attr_reader :count
def initialize
@count = 0
end
def increment
@count += 1
end
end
RSpec.describe Task, type: :model do
it '呼び出しているかどうかのテスト' do
sample = Sample.new
expect(sample).to receive(:increment)
expect(sample.count).to eq(0)
# 実際に呼び出してはいない
sample.increment
expect(sample.count).to eq(0)
end
it '実際に呼び出すテスト' do
sample = Sample.new
expect(sample).to receive(:increment).and_call_original
expect(sample.count).to eq(0)
sample.increment
expect(sample.count).to eq(1)
end
end
出力結果
$ rspec spec/models/task9_spec.rb
Task
呼び出しているかどうかのテスト
実際に呼び出すテスト
Finished in 0.00736 seconds (files took 1.75 seconds to load)
2 examples, 0 failures
and_call_original を使うと実際のメソッドが呼び出されていることが分かります。