Как я могу доказать, что конкретный экземпляр больше не существует с использованием RSpec? - PullRequest
0 голосов
/ 10 февраля 2019

Я пишу модульные тесты в RSpec, чтобы проверить, что созданный экземпляр больше не существует после того, как метод перемещает или удаляет его.

Например, у меня есть класс Airport и класс Plane, иairport = Airport.new инициализируется с сохраненным экземпляром Plane.new.Когда метод #takeoff запущен, Plane.new хранится где-то еще или # pop'ped.

Как я могу доказать, что этот точный экземпляр Plane.new не включен в аэропорт?Есть ли способ получения идентификатора объекта, с которым работает метод?

Тест, о котором я думаю, будет выглядеть примерно так:

describe Airport do
  it "confirms plane is not there after #takeoff" do
    airport = Airport.new
    airport.takeoff
    expect(airport).not_to include(*ID OF PLANE MOVED/POPPED*)
  end
end

ВВ будущем Airport может быть инициализирован любым количеством самолетов, поэтому я считаю, что для подтверждения потребуется использовать идентификатор, но я был бы рад услышать иначе.

Ответы [ 2 ]

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

Вот пример использования object_id, как упомянуто в моем комментарии.Мои навыки в rspec немного заржавели, но, надеюсь, вы поняли.проверьте точный объект.

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

Обычно модульные тесты тестируют общедоступные API, поэтому вопрос должен звучать так: «Есть ли у аэропорта способ сообщить нам, какие самолеты находятся на земле?».И должен быть такой метод, если это важная часть информации.Например, у вас могут быть методы с именем planes, а затем вы просто проверяете, включен ли конкретный экземпляр в эту коллекцию:

expect(airport.planes).not_to include(plane)

Альтернативный подход может заключаться в том, что самолет имеет ссылку на аэропорт, гдеон находится прямо сейчас и после взлета будет установлен на ноль.Таким образом, вы бы в конечном итоге проверили эту ссылку:

expect(plane.airport).to be_nil

Но в любом случае все дело в моделировании данных, а не в тестовых средах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...