Внедрение зависимостей, вызывающее как сбой Rspec, так и сбой IRB - PullRequest
0 голосов
/ 02 февраля 2019

Примечание: я начинающий программист на Ruby.У меня есть класс с именем JourneyLog Я пытаюсь получить метод с именем start для создания экземпляра нового экземпляра другого класса с именем Journey

class JourneyLog
  attr_reader :journey_class

   def initialize(journey_class: Journey)
    @journey_class = journey_class
    @journeys = []
  end

  def start(station)
   journey_class.new(entry_station: station)
 end
end

Когда я вхожу в irb, я получаюследующая проблема

    2.2.3 :001 > require './lib/journeylog'
     => true
    2.2.3 :002 > journeylog = JourneyLog.new
    NameError: uninitialized constant JourneyLog::Journey
    from /Users/BartJudge/Desktop/Makers_2018/oystercard-challenge/lib/journeylog.rb:4:in `initialize'
    from (irb):2:in `new'
    from (irb):2
    from /Users/BartJudge/.rvm/rubies/ruby-2.2.3/bin/irb:15:in `<main>'
2.2.3 :003 >

У меня также есть следующий тест Rspec

require 'journeylog'
describe JourneyLog do
  let(:journey) { double :journey, entry_station: nil, complete?: false, fare: 1}
  let(:station) { double :station }
  let(:journey_class) { double :journey_class, new: journey }

  describe '#start' do
    it 'starts a journey' do
      expect(journey_class).to receive(:new).with(entry_station: station)
      subject.start(station)
    end

  end
end

Я получаю следующую ошибку Rspec;

1) JourneyLog#start starts a journey
     Failure/Error: expect(journey_class).to receive(:new).with(entry_station: station)

       (Double :journey_class).new({:entry_station=>#<Double :station>})
           expected: 1 time with arguments: ({:entry_station=>#<Double :station>})
           received: 0 times
     # ./spec/jorneylog_spec.rb:9:in `block (3 levels) in <top (required)>'

Я в полной потерео том, в чем проблема, или где искать ответы на некоторые вопросы.Я предполагаю, что не вводю класс Journey должным образом, но это насколько я могу получить сам.Может ли кто-нибудь оказать некоторую помощь?

1 Ответ

0 голосов
/ 02 февраля 2019

В файле journeylog.rb необходимо загрузить класс Journey:

require 'journey' # I guess the Journey class is defined in lib/journey.rb

В файле спецификации необходимо передать journey_class в конструктор JourneyLog:

describe JourneyLog do
  subject { described_class.new(journey_class: journey_class) }
  # ...
...