この質問を読んだ後、私は本当に答えが嫌いです。RSpec - オブジェクトが#initializeで自己にメッセージを送信するかどうかをテストする方法
Rails/RSpec: How to test #initialize method?
たぶん私は、第三のシナリオを持っています。これは私の今のものです。その答えの2番目のコードに触発されています。
# Picture is collection of SinglePictures with same name and filename,
# but different dimensions
class Picture
attr_accessor :name, :filename
attr_reader :single_pics, :largest_width
def initialize(name, filename, dimensions=nil)
@largest_width = 0
@single_pics = {}
add_single_pics(dimensions) if dimensions
end
def add_single_pics(max_dimension)
# logic
end
end
describe '#initialize' do
it 'should not call add_single_pics if dimensions is not given' do
subject = Picture.new('Test Picture', 'Test-Picture')
expect(subject.largest_width).to eq 0
end
it 'should call add_single_pics if dimensions are given' do
subject = Picture.new('Test Picture', 'Test-Picture', 1920)
expect(subject.largest_width).to eq 1920
end
end
私は#initializeテストでadd_single_picsの機能をテストしているので、これは本当に好きではありません。
expect(subject).not_to have_received(:add_single_pics)
expect(subject).to have_received(:add_single_pics)
しかし、私は
Expected to have received add_single_pics, but that object is not a spy
or method has not been stubbed.
が、私は何とかこの問題を解決することができ得る:私はスペックで何とかこれを書きたいですか?
あまりにも悪い、彼らはそれがレガシーコードのためだし、それを使用したいことはコードのにおいであると言います。私はこのコードを私が嗅覚的に書きましたか?笑。 'Picture'クラスを使用するときに、新しい行の後にadd_single_picsを呼び出す必要がなく、コード行を節約したいと思いました。 –