与えられた 2 つのクラス、Superclass
およびSubclass
-
allow
スーパークラスで を使用して別のものを返すにはどうすればよいですか?
#=> given `rspec` is in your $LOAD_PATH, this should be an SSCCE
require 'rspec'
class Superclass
def superclass_method
true
end
end
class Subclass < Superclass
def subclass_method
superclass_method
end
end
descriptor = RSpec.describe Subclass do
describe '#subclass_method' do
subject(:subclass) { described_class.new }
let(:superclass) { spy('superclass') }
before do
stub_const('Superclass', superclass)
allow(superclass).to receive(:superclass_method).and_return false
end
it 'should return false' do
expect(subclass.subclass_method).to eq(false)
end
end
end
p descriptor.run
p descriptor.run
上記のコードのreturnの出力false
(つまり、テストが失敗した) はtrue
、期待値を に変更すると while が表示されexpect(subclass.subclass_method).to eq(true)
ます。
ここで単純なものが欠けているように感じます。
いくつかのデバッグを行ったところ、いくつかのことがわかりました。
subclass.subclass_method #=> true
subclass.superclass_method #=> true
superclass.superclass_method #=> false
ここの3行目で問題ないことがわかりますが、サブクラスから呼び出されたときにこれを返す方法がわかりません