rspecを使用してブロックが自分の関数で呼び出されているかどうかを確認します。ブロックをチェックする方法はrspecを使用して呼び出されます
SP testing speak functionality can receive a block
Failure/Error: block.call()
NoMethodError:
undefined method `call' for nil:NilClass
# ./test.rb:9:in `speak'
# ./test.rb:25:in `block (2 levels) in <top (required)>'
はあなたが助けてくださいでした:
class SP
def speak(options={},&block)
puts "speak called"
block.call()
rescue ZeroDivisionError => e
end
end
describe SP do
it "testing speak functionality can receive a block" do
sp = SP.new
def test_func
a = 1
end
sp_mock = double(sp)
expect(sp_mock).to receive(:speak).with(test_func)
sp.speak(test_func)
end
end
以下は私の誤りである:以下は私のコードです。私はそれに多くの時間を費やしました。
これは、「yield_control」の機能ですね。 – Stefan
@Stefan実際にテストする内容によって異なります。この場合、 '.yield_with_no_args'が最も具体的なテストになります。しかし、 'SP#speak'は渡されたブロックによって異なる動作をするので、それらのケースもカバーする必要があります。テスト設定では、渡されたブロックは 'ZeroDivisionError'を発生させる必要があります。 –