rubin metaprogramming - Ausbeute Block in dynamisch hinzugefügt Verfahren nicht funktioniert
-
05-07-2019 - |
Frage
Ich arbeite die auf die Erweiterung NotAMock Rahmen für die Methoden in rspec Anstoßen und die Stubs immer zu einem Methoden-Block zu erhalten.
Die Code in diesem Gist stubbing perfekt funktioniert, wenn ich es codieren auf meinem eigenen (was getan-up ist zu ähneln, wie NotAMock Stubs Methoden).
aber wenn ich den object.instance_eval ... Code in den NotAMock Rahmen, die "block_given?" Übernehmen immer wieder falsch und ich kann meine Ausbeute nie aus diesem Grunde an der Arbeit. Das Verfahren wird hinzugefügt richtig, und ich kann die Stub-Methode aufrufen, ... aber es wird der Block nicht erkennen, dass ich an die Methode übergeben, von der NotAMock Version stubbed.
Um zu sehen, wie ich diesen Code in das NotAMock Rahmen integriert haben, gehen Sie auf meine Klon von NotAMock und überprüfen Sie die „add_hook“ -Methode in den privaten Methoden aus.
Ich weiß, das ist ein bisschen viel zu fragen ... Ich bin der Hoffnung, einige Hinweise zu finden. es wurde mir Nüsse den ganzen Tag fahren.
Lösung 2
Es stellte sich heraus das Problem mit dem Code nicht verwandt ist, die ich im Zusammenhang mit ... der NotAMock Rahmen ist eine zusätzliche Methode Neudefinition zu tun, dass mein Problem verursacht. Ich habe das Problem verengt auf eine bestimmte Codezeile, und arbeite heraus, wie es nun fix.
Andere Tipps
Ich bin mir nicht einmal sicher, ob dies möglich ist. New Procs Blöcke nicht einmal erkennen.
proc = Proc.new do
if block_given?
yield
else
puts "Not in a block"
end
end
proc.call { puts "In a block"} # => puts Not in a block
Ruby 1.9 sollten Blöcke ermöglichen als Parameter zu nehmen und blockieren. Aber ich weiß nicht, ob das funktionieren wird oder auch wenn es bedingte Blöcke erlauben wird.