1

是否可以暂时将某些方法应用于类进行测试?我希望能够根据多种应用方式来运行规范。虽然我可以制作一堆具有不同设置的夹具,但我发现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吗?如何?

谢谢!

4

2 回答 2

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
于 2011-05-22T05:52:25.420 回答
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
于 2011-05-22T15:16:57.710 回答