何か:
it 'call methods in order' do
@method_calls = []
allow(@instance).to receive(:foo) do
@method_calls << :foo
end
allow(@instance).to receive(:bar) do
@method_calls << :bar
end
...
expect(@method_calls).to eq([:foo, :bar, :foo, :bar, :foo, :bar])
end
はここで完全にこれを示し、私が試した、最小限のテストです:この仕様を実行する
require "rspec"
class MyClass
def bar
end
def foo
end
def foobar
foo
bar
foo
bar
foo
bar
end
end
describe "Foo" do
describe "#foobar" do
let(:instance) { MyClass.new }
it "alternately calls foo/bar" do
@method_calls = []
allow(instance).to receive(:foo) do
@method_calls << :foo
end
allow(instance).to receive(:bar) do
@method_calls << :bar
end
instance.foobar
expect(@method_calls).to eq([:foo, :bar, :foo, :bar, :foo, :bar])
end
end
end
にはパスするが、(例えば)メソッドの1つを取り外しfoobar
メソッドの呼び出しでこのエラーが発生します。
F
Failures:
1) Foo #foobar alternately calls foo/bar
Failure/Error: expect(@method_calls).to eq([:foo, :bar, :foo, :bar, :foo, :bar])
expected: [:foo, :bar, :foo, :bar, :foo, :bar]
got: [:bar, :foo, :bar, :foo, :bar]
(compared using ==)
Diff:
@@ -1,2 +1,2 @@
-[:foo, :bar, :foo, :bar, :foo, :bar]
+[:bar, :foo, :bar, :foo, :bar]
# ./rspec_test.rb:38:in `block (3 levels) in <top (required)>'
Finished in 0.01517 seconds (files took 0.07714 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./rspec_test.rb:25 # Foo #foobar alternately calls foo/bar
希望それは理にかなっている。
は完璧に動作しました...私は何か似ていましたが、 'expect'コールにブロックを追加しました。' allow'コールではありません.... wonderulありがとう! – brewster
うれしかった!私は興味がある場合に備えて、rspecの相互依存性を嘲笑することについて書いた記事に基づいています。http://tech.degica.com/en/2015/03/06/mocking-with-interdependency-in-rspec/ –