Я новичок в тестировании и столкнулся с небольшой проблемой при тестировании ответов на внешние зависимости.
Мой вариант использования заключается в том, что у меня есть драгоценный камень Foo, который отправляет обратно некоторые данные на основе переданных данных. Я использую этот гем, когда инициализирую класс FooBar. Код для этого выглядит примерно так:
require 'foo'
class FooBar
attr_accessor :thing
def initialize(name)
@thing = Foo(thing)
end
end
Я хочу иметь возможность заглушить инициализацию класса FooBar в моей тестовой среде rails, но разрешить обработку внешнего запроса в моей производственной среде. В моей тестовой среде я хотел бы просто вернуть экземпляр FooBar с предварительно заданными значениями. Сейчас я просто пытаюсь вернуть строку.
Я пытаюсь использовать драгоценный камень WebMock для остановки инициализации FooBar прямо сейчас с помощью:
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
RSpec.configure do |config|
config.before(:each) do
allow(foo_bar).to receive(:new).and_return('stubbed')
end
end
end
С этим в моем файле spec_helper и моими тестами, проверяющими инициализацию FooBar на «заглушение». Конкретная ошибка, которую он выдает:
FooBar When I initialize class FooBar should be a string
FooBar
Failure/Error: Unable to find matching line from backtrace
NameError:
undefined local variable or method `foo_bar' for
#<RSpec::ExampleGroups::FooBar::WhenIInitializeClassFooBar>
Есть ли что-то очевидное, что я упускаю?