rubin metaprogramming - Ausbeute Block in dynamisch hinzugefügt Verfahren nicht funktioniert

StackOverflow https://stackoverflow.com/questions/1604776

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top