warn
her nesnenin dahildir Kernel
, tanımlanmıştır. Eğer başlatma sırasında uyarı yükselterek olmasaydı, bir böyle uyarı belirtebilirsiniz:
obj = SomeClass.new
obj.should_receive(:warn).with("Some Message")
obj.method_that_warns
initialize
yönteminde kaldırdı uyarı spec'ing oldukça daha karmaşıktır. Eğer yapılması gerekiyorsa, $stderr
için sahte IO
nesnesinde takas yapabilir ve inceleyebilirsiniz. Tam olarak senin sorunun çözer özel beklentisiyle iyi bir yazı yoktur
class MyClass
def initialize
warn "Something is wrong"
end
end
describe MyClass do
before do
@orig_stderr = $stderr
$stderr = StringIO.new
end
it "warns on initialization" do
MyClass.new
$stderr.rewind
$stderr.string.chomp.should eq("Something is wrong")
end
after do
$stderr = @orig_stderr
end
end
Bunun yerine SomeClass 'den SomeClass.allocate'' yapabilir miyiz:Bu benim CustomMatchers dahil sonra şimdi
Takip olarak bu fonksiyonu kullanabilirsiniz özel bir eşleştirici has_warn benim çözüm tanımlamak edilir .new' ve sonra should_receive verin ve sonra başlatılamıyor? –
"Başlatmada" uyarılar için kullandığım diğer yaklaşım, "Kernel.warn" adlı sınıf çağrımı açıkça (yalnızca 'uyarı' yerine) kullanmaktır. Çekirdeğe çağrılmasına gerek yoktur; Sadece bazı küresel üzerinde çağrılmadan önce bir 'should_receive 'ayarlayabileceğime çağırılmalı. –