在Rspec中测试抽象类

Sys*_*ank 4 ruby rspec

在我的Ruby库中,我有一些旨在通过继承使用的类.因此,我在spec文件中做的第一件事就是定义一个自定义Foo类:

module MyGem
  describe MyClass do
    class FooMyClass < MyClass
      ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是定义的类将泄漏到其他测试,并且必须小心使用唯一名称或使用after :all块删除类.

考虑到Rspec已经给出的所有魔法,这感觉有点手动.有没有更好的方法来定义抽象类的规范?大多数情况下,我想要一种简单的方法来清理所有时间声明的命名空间.

当我定义多个这样的类时清理它是特别烦人的:

module MyGem
  describe MyClass do
     ... 
  end

  class FooMyClass < MyClass
    ...
  end
  describe FooMyClass do
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

使用after :allafter :each阻止正确地取消定义更加困难.

hji*_*ing 9

一种可能性是使用匿名类.

  let(:fooMyClass) do
    Class.new(MyClass) do
      # ...
    end
  end
Run Code Online (Sandbox Code Playgroud)

这样就没有必要进行清理了.