[英]How do you temporarily “class_eval” for a test?
是否可以將某些方法臨時應用於類進行測試? 我希望能夠根據多種應用方式來運行規格。 雖然我可以用不同的設置制作一堆燈具,但我發現在測試中class_eval
模型進行class_eval
比較容易。 例如:
describe "some context"
before do
Page.class_eval do
my_applying_method :some => :option
end
end
it "should..."
end
然后在另一個上下文塊中:
describe "another context without the gem applied"
before do
Page.class_eval do
# nothing here since I want to page to be as is
end
end
it "should do something else..."
end
但是最后一個上下文塊的問題在於它具有修改后的類(在上面的上下文塊中已修改)。 是否可以在class_eval
之后重設課程 ? 怎么樣?
謝謝!
我希望有一個更好的方法可以執行此操作,但是您可以使用它(並且在Foo = Foo_old
行中帶有警告):
module Bar
def baz
end
end
class Foo
end
puts Foo.method_defined? :baz #=> false
Foo_old = Foo.dup # create a copy of our class
Foo.class_eval do
include Bar
end
puts Foo.method_defined? :baz #=> true
Foo = Foo_old
puts Foo.method_defined? :baz #=> false
您尚未弄清如何修改類。
混音庫使您可以臨時包含一個模塊,並在以后適當地取消包含它。
通常,只復制類並測試重復的塊可能是最安全的:
irb(main):001:0> class Foo; end
#=> nil
irb(main):002:0> Foo.dup.class_eval{ @x = 42 }
#=> 42
irb(main):003:0> Foo.class_eval{ @x }
#=> nil
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.