0

与えられた 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行目で問題ないことがわかりますが、サブクラスから呼び出されたときにこれを返す方法がわかりません

4

1 に答える 1