warn
se define en Kernel
, que se incluye en cada objeto. Si usted no estaba criando la advertencia durante la inicialización, se puede especificar una advertencia como esta:
obj = SomeClass.new
obj.should_receive(:warn).with("Some Message")
obj.method_that_warns
spec'ing una advertencia planteado en el método initialize
es bastante más compleja. Si es necesario, puede intercambiar un objeto falso IO
por $stderr
e inspeccionarlo. Sólo asegúrese de restaurarla siguiendo el ejemplo
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
podrías hacer '' SomeClass.allocate' en lugar de SomeClass .new', y luego darle el should_receive, y luego ejecutar initialize? –
El otro enfoque que he usado para advertencias en 'initialize' es hacer que mi clase llame' Kernel.warn' explícitamente (en lugar de solo 'warn'). No necesita ser llamado en kernel; solo necesita ser llamado en algunos globales que puedo establecer un 'should_receive' antes de la creación de instancias. –