我试图重构当前通过或失败的规范,该规范基于示例的运行顺序。
规格低于标准。
如果第一个示例先运行,规范就会通过。
如果第二个测试在第一个测试之前运行,它将失败。我理解它失败的原因--在FieldExtractor中有三个ObjectSpace子类,所以断言expect(FieldExtractor.all.size).to eq 2将是假的。
RSpec.describe FieldExtractor do
it 'keeps track of subclasses' do
class TotalExtractor < FieldExtractor
end
class VendorExtractor < FieldExtractor
end
expect(FieldExtractor.all).to include(TotalExtractor)
expect(FieldExtractor.all).to include(VendorExtractor)
expect(FieldExtractor.all.size).to eq 2
end
it 'keeps track of extracted field' do
class ConfiguredExtractor < FieldExtractor
extracts :vendor
end
expect(ConfiguredExtractor.field).to eq :vendor
end
end我的问题是如何解决这个间歇性的测试失败。
有什么优雅的方法吗?我是用这种方式来测试这个的吗?
我得到的一个解决方案是在规范开始时(在示例之外)定义所有的子类,这样我就知道应该有多少个子类。我不喜欢这个解决方案,因为我有很多有很多子类的例子,而且它似乎没有很好的扩展性。
发布于 2015-09-25 18:34:12
您可以使用常量对未定义的const进行存根,测试执行后将自动删除该命令:
it 'keeps track of subclasses' do
stub_const('TotalExtractor', Class.new(FieldExtractor))
stub_const('VendorExtractor', Class.new(FieldExtractor))
expect(FieldExtractor.all).to include(TotalExtractor)
expect(FieldExtractor.all).to include(VendorExtractor)
expect(FieldExtractor.all.size).to eq 2
endhttps://stackoverflow.com/questions/32786683
复制相似问题