私は私はいくつかの目標をモジュールのプライベートセクションでは、以下の方法...Rspec 3.5のモジュールでカーネルスリープメソッドをテストするには?
def add_api_delay
sleep(retry_delay * (retry_multiplier_adjustment - retries)) if retries.positive?
end
私はこれまでのところ、このようなルックスで働いていますスペック...
let!(:klass) do
Class.new do
include AmazonMws::Shared::Utilities
attr_accessor :retries, :retry_multiplier_adjustment, :retry_delay
def initialize
@retries = 1
@retry_delay = 1
@retry_multiplier_adjustment = 2
end
def test_add_api_delay
add_api_delay
end
end
end
describe '.add_api_delay', focus: true do
# let(:kernel_spy) { class_spy(Kernel, sleep: true) }
before do
end
it 'sleeps retry api calls' do
# allow(klass).to receive(:sleep).with(1).and_return(kernel_spy)
# expect(kernel_spy).to have_received(:sleep)
# expect(Kernel).to receive(:sleep).with(1)
expect(Kernel).to receive(:sleep).and_return(true)
klass.new.test_add_api_delay
end
end
を持っています私はこのプライベートメソッドをテストしたいのですが、どのようにスリープが呼び出されたかを確認する方法があります。私はスイートを遅くしたくないので理想的にはKernelに対してクラススパイを使用しようとしています。私がテストしているものは何も動作していないようです。
UPDATE
describe '.add_api_delay' do
before do
allow_any_instance_of(klass).to receive(:sleep).and_return(1)
end
it 'sleeps retry api calls' do
expect(klass.new.test_add_api_delay).to eq(1)
end
end
この作品は、しかし、それは以下の警官、それのフラグとして理想的ではありません...
C: RSpec/AnyInstance: Avoid stubbing using allow_any_instance_of
allow_any_instance_of(klass).to receive(:sleep).and_return(1)
あなたの考えは何ですか?
Timさん、ありがとうございました。 –