gpt4 book ai didi

ruby - 如何使用 rspec 测试 ruby​​ 继承

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:53 27 4
gpt4 key购买 nike

我正在尝试测试在类继承期间运行的逻辑,但在运行多个断言时遇到了问题。

我第一次尝试...

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

但这失败了,因为 Bar 类已经加载,因此不会第二次调用 inherited。如果断言没有先运行……它就会失败。

然后我尝试了类似...

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 不会在测试之间持续存在,所以测试不会只运行一次。

谁有什么巧妙的方法来完成这个?这是一个人为的例子,我实际上不需要测试 ruby​​ 本身;)

最佳答案

这是使用 RSpec 测试类继承的简单方法:

给定

class A < B; end

使用 RSpec 测试继承的一种更简单的方法是:

describe A do
it { expect(described_class).to be < B }
end

关于ruby - 如何使用 rspec 测试 ruby​​ 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com