RSpec: Как заглушки в методе тестируемого объекта? - PullRequest
0 голосов
/ 28 октября 2018

Новичок rspec здесь. Я понимаю, что могу уничтожить метод тестируемого объекта, используя 'allow () .to receive () .and_return', но если сам объект, который я тестирую, использует другой объект, который имеет дорогой метод, как я могу заглушить затраты?) часть e внутри этого метода, но все еще тестируете остальную часть метода?

То есть, если у меня есть метод, подобный

class Foo
  def process
   data = DataModel.fetch_data #<-- the expensive process.
    if verify(data)
      [do things]
    end
  end

  private 
  def verify(data)
    [...]
  end
end

Итак, как мне написать тест rspec, в котором я могу предоставить методу процесса данные теста, чтобы я мог проверить, правильно ли работают проверки и «делают ли что-то»? Я не хочу выполнять DataModel.fetch, потому что это отнимает много времени и дорого. (Рельсы 5.2)

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете сделать:

fetched_data = instance_double("TheClassReturnedFrom#fetch_data")
allow(DataModel).to receive(:fetch_data).and_return(fetched_data)
...