Как вы проверяете, что метод Ruby возвращает результат другого метода Ruby? - PullRequest
0 голосов
/ 13 июня 2018

Допустим, у меня есть два метода, в которых один из методов возвращает результат другого метода:

class SomeClass
  def method_a
    method_b
  end

  def method_b 
    'foobar'
  end
end

И я пытаюсь проверить method_a без повторной проверки логики метода b.Для этого я использую что-то вроде этого:

RSpec.describe SomeClass do
  subject { SomeClass.new }

  describe '#method_a' do
    expect(subject).to receive(:method_b)
    subject.method_a
  end
end

Обычно это работает просто отлично, однако в этом случае важно, чтобы метод a фактически возвращал результат метода b, а не только то, что он вызывается,Как я могу это сделать?(Возможно, это метод для этого? Потенциально назвали что-то вроде #receive_and_return или #return_value_of_method_call или что-то в этом роде.)

1 Ответ

0 голосов
/ 13 июня 2018

вам нужны rspec-mocks (https://relishapp.com/rspec/rspec-mocks/docs/configuring-responses/returning-a-value#specify-a-return-value)

RSpec.describe SomeClass do
  describe '#method_a' do
    let(:some_class) { SomeClass.new }
    context 'method_b return foobar' do
      before { allow(some_class).to receive(:method_b).and_return('foobar') }
      it 'will return foobar' do
        allow(some_class).to receive(:method_b).and_return('foobar')
        expect(some_class.method_a).to eq('foobar')
      end
    end
    context 'method_b return barbar' do
      before { allow(some_class).to receive(:method_b).and_return('barbar') }
      it 'will return barbar' do
        expect(some_class.method_a).to eq('barbar')
      end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...