başka bir birime dahil olan modül var ve ikisi de aynı yöntemi uygulamak. Ben, böyle bir şey dâhili modülün yöntemi saplama istiyorum:Rspec ile birlikte verilen bir modülün yöntemini yerleştirmenin bir yolu var mı?
module M
def foo
:M
end
end
module A
class << self
include M
def foo
super
end
end
end
describe "trying to stub the included method" do
before { allow(M).to receive(:foo).and_return(:bar) }
it "should be stubbed when calling M" do
expect(M.foo).to eq :bar
end
it "should be stubbed when calling A" do
expect(A.foo).to eq :bar
end
end
ilk test geçiyor, fakat ikinci bir çıkış:
Failure/Error: expect(A.foo).to eq :bar
expected: :bar
got: :M
Neden saplama çalışma değil bu durumda? Bunu başarmanın farklı bir yolu var mı?
Teşekkürler!
------------------------------------- GÜNCELLEME -------- --------------------------
teşekkürler! allow_any_instance_of (M) kullanarak bunu çözdü. Bir sonraki sorum şu: - ben kullanmaya başladım ve dahil etmesem ne olur? sonsuz bir döngüde allow_any_instance_of (M) sonuçları kullanılarak,
module M
def foo
super
end
end
module A
class << self
prepend M
def foo
:A
end
end
end
describe "trying to stub the included method" do
before { allow_any_instance_of(M).to receive(:foo).and_return(:bar) }
it "should be stubbed when calling A" do
expect(A.foo).to eq :bar
end
end
Bu zaman: aşağıdaki kodu bakın. Neden? Doğrudan M.foo
diyemezsin
Bu çalışır. Görünüşe göre, 'allow' seçeneğinin aksine allow_any_instance_of', nesne üzerinde tanımlanacak yöntemin kullanılmasını gerektirmiyor. –
Sanırım bu sadece kafamı masaya çarparak 5 + saat değerinde çözmemde bana yardımcı oldu. Teşekkürler! – Derek
Cf, 'expect_any_instance_of' ... Bu doğru yolda beni koy –