Ответ 1
Там открыть проблему rspec-mocks, чтобы решить эту проблему. Надеюсь, что в какой-то момент я попытаюсь обратиться к нему, но не просто добавить это так, чтобы не нарушать существующие спецификации, которые используют any_instance
с реализацией блока, потому что мы начнем давать дополнительный аргумент (например, экземпляр объекта).
В целом, any_instance
может пригодиться в некоторых ситуациях, но это немного запах, и у вас, как правило, будет меньше проблем, если вы сможете найти способ издеваться или заглушить отдельные экземпляры.
Вот работа, которую я не тестировал, но должен работать:
orig_new = MyObject.method(:new)
MyObject.stub(:new) do |*args, &block|
orig_new.call(*args, &block).tap do |instance|
instance.stub(:fetch) { instance }
end
end
По существу, мы моделируем any_instance
здесь, подключаясь к MyObject.new
, чтобы мы могли заглушить fetch
для каждого нового экземпляра, который был создан.
Все, что было сказано, важно "слушать ваши тесты", и, когда что-то трудно проверить, подумайте о том, что говорится о вашем дизайне, а не сразу используйте электроинструменты, такие как any_instance
. Ваш оригинальный вопрос не дает мне достаточного контекста, чтобы я мог что-то рассказать о вашем дизайне, но определенно, где бы я начал, когда сталкивался с необходимостью сделать это.