是否可以暂时将某些方法应用于类以进行测试?我希望能够根据许多方法运行规范。虽然我可以制作一组具有不同设置的灯具,但我发现在测试中只需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
之后重置课程?怎么样?
谢谢!
答案 0 :(得分:2)
我希望有更好的方法可以做到这一点,但你可以使用它(并在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
答案 1 :(得分:1)
您尚未阐明如何修改课程。
remix库允许您临时包含一个模块,并在以后正确地取消包含它。
一般来说,复制类并测试副本可能是最安全的:
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