我想测试在类继承期间运行的逻辑,但在运行多个断言时遇到了问题。如何使用rspec测试ruby继承
我第一次尝试......
describe 'self.inherited' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
# this fails if it doesn't run first
expect(Foo).to have_received(:inherited).with Bar
end
it 'should do something else' do
expect(true).to eq true
end
end
但这种失败,因为酒吧类已经被加载,因此不叫inherited
第2个时间。如果断言不首先运行......它会失败。
于是我想是这样......
describe 'self.inherited once' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
@tested ||= false
unless @tested
expect(Foo).to have_receive(:inherited).with Bar
@tested = true
end
end
it 'should do something else' do
expect(true).to eq true
end
end
因为@tested
不从测试坚持到测试,测试不只是运行一次。
任何人有任何聪明的方法来实现这一目标?这是一个人为的例子,我不实际上需要测试红宝石本身;)
测试的行为,而不是执行。测试类是否从继承类继承将是合理的,只有当方法在做元编程的东西时(比如构造类和设置祖先) –