[英]Testing abstract classes in Rspec
在我的Ruby库中,我有一些旨在通过继承使用的类。 因此,我在spec文件中做的第一件事就是定义一个自定义的Foo
类:
module MyGem
describe MyClass do
class FooMyClass < MyClass
...
end
end
end
问题是定义的类将泄漏到其他测试,并且必须小心使用唯一名称或使用after :all
块删除类。
考虑到Rspec已经给出的所有魔法,这感觉有点手动。 有没有更好的方法来定义抽象类的规范? 大多数情况下,我想要一种简单的方法来清理所有时间声明的命名空间。
当我定义多个这样的类时清理它是特别烦人的:
module MyGem
describe MyClass do
...
end
class FooMyClass < MyClass
...
end
describe FooMyClass do
...
end
end
after :all
正确地取消定义甚至更难after :all
或after :each
块。
describe MyClass do
let(:klass) { Class.new(MyClass) }
it "works without assigning a constant name" do
obj = klass.new
expect(obj).to be_kind_of(MyClass)
end
end
在测试中创建常量总是很痛苦,这是我使用过的有用的解决方法。
根据@ hjing的回答,还可以使用stub_const
before do
stub_const('MyClass', fooMyClass)
end
这使得MyClass
在您的规范中可用作常量。 如果类的行为取决于其名称(这有时在花哨的元编程中完成),这将非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.