#ruby #rspec #mocking #double #stub
#ruby #rspec #издевательство #double #заглушка
Вопрос:
Я довольно новичок в Ruby, и это мой первый вопрос по stackoverflow, поэтому, пожалуйста, будьте терпеливы со мной, хе-хе.
Я изо всех сил пытаюсь пройти тест Rpec, используя double.
У меня есть класс Plane, у которого есть attr_reader :plane_number из его метода инициализации @plane_number = plane_number . attr_reader:plane_number
Class Plane
def initialize
@plane_number = plane_number
end
end
Я использую эту переменную в другом классе Airport для ссылки на конкретный самолет с его номером самолета в строковом сообщении. Примером строки в моем коде является:
class Airport
def confirms_landed(plane)
"The plane #{plane.plane_number} has landed"
end
end
Я создал тест с помощью Rspec, используя double для экземпляра плоскости, используя let(:plane) {double :plane}
Но я не уверен, как использовать double для переменной plane_number.
describe Airport do
let(:plane) {double :plane}
it "confirms a plane has landed" do
subject.confirms_landed(plane)
expect(subject.confirms_landed(plane)).to eq("The plane #{plane.plane_number} has landed")
end
end
Код работает нормально и возвращает правильную строку с номером плоскости в ней, однако тест завершается неудачей, поскольку я не присваиваю double переменной plane_number (я получаю это сообщение об ошибке: Double:plane получил неожиданное сообщение: plane_number с (без аргументов))
Я уверен, что это очень просто исправить, но, похоже, я не могу найти правильный ответ.
Комментарии:
1.
double :plane, plane_number: 10
Ответ №1:
Из того, что я вижу, вам просто не хватает метода номера плоскости в double
class Airport
def confirms_landed(plane)
"The plane #{plane.plane_number} has landed"
end
end
describe Airport do
let(:plane) { double(:plane, plane_number: 56) }
it "confirms a plane has landed" do
expect(subject.confirms_landed(plane)).to eq("The plane 56 has landed")
end
end