Это может звучать как ужасно основной вопрос ... так позвольте мне объяснить контекст. Я извлекаю событие из Stripe, но для целей этого, но это работает для других вещей, которые я рассмотрел.Rspec, можете ли вы заглушить метод, который не существует на объекте (или издеваться над объектом, который может принять любой метод)?
Данные, которые мне нужны в объекте Stripe, захоронены, поэтому мне нужно было бы сделать event.data.object.date.lines.first.id
. Я не уверен, как насмехаться/заглушить это ...
Единственный способ, которым я могу это сделать, - создать фальшивую модель, имитирующую объект события Stripe (в этом примере для меня помните, что Stripe события не могут быть созданы пользователем). И тогда я могу издеваться над этой поддельной моделью. Но действительно ли это способ сделать это? Есть ли способ, которым я могу просто использовать Rspec, чтобы заглушить весь shebang и сказать, что event.data.object.date.lines.first.id
, где бы он ни появлялся, нужно просто перенастроить 1
?
О, а также ... если нет, и получается, что мне нужно создать поддельную модель ... советы очень ценятся, потому что прямо сейчас я думаю, что эта «поддельная» модель нуждается во многих слоях детей, и полностью не стоит затрат времени.
Так что мне нужно пойти с опцией 2. Класс события = 'Stripe :: Event'. Если я попробую 'allow (any_instance_of (Stripe :: Event)) to receive_message_chain (: data,: object,: date) .and_return (Date.today)', я получаю 'undefined method' any_instance_of 'для # '. И если я попробую, 'Stripe :: Event.any_instance.stub_chain (: data,: object,: date) .and_return (Date.today)', я получаю 'Stripe :: Event не реализует # data' –
james
Извините, я Смешанные старые и новые методы RSpec. Я обновил ответ, чтобы отразить текущий метод., Тем не менее, учитывая сообщение об ошибке, которое вы сообщили, «событие» не является экземпляром 'Stripe :: Event' или' Stripe :: Event', не определяет метод экземпляра 'date'. –
Еще одно: методы 'stub ...' RSpec проверяют, определяет ли класс этот метод. Я подозреваю, что 'Stripe' динамически определяет метод' data', поэтому вы сталкиваетесь с этим. Попробуйте пересмотренную версию в моем ответе, которая не проходит через эту проверку «stubbing». –