Так как метод initialize_some_other_stuff
является закрытым для класса, вам не важно, выполняется он или нет. Тем не менее, если этот метод выполняет дорогостоящую операцию, которую вы не хотите, чтобы ваш тест ждал, то вполне нормально смоделировать эту операцию.
Итак, если Фу выглядел так:
class Foo
attr_reader :options, :other_stuff
def initialize(options)
@options = options
initialize_some_other_stuff
end
def initialize_some_other_stuff
@other_stuff = Bar.new.long_running_operation
end
end
Тогда вы могли бы издеваться над звонком на Bar#long_running_operation
так:
describe Foo do
subject(:foo) { described_class.new(options) }
let(:options) { 'options' }
let(:bar) { instance_double(Bar, long_running_operation: 42) }
before do
allow(Bar).to receive(:new).and_return(bar)
foo
end
it 'initializes options' do
expect(foo.options).to eq(options)
end
it 'initializes other stuff' do
expect(foo.other_stuff).to eq(bar.long_running_operation)
end
end
Теперь вы проверяете задания. Но вы не ожидаете завершения дорогостоящей операции.