Если вы беспокоитесь о том, что пользовательская спецификация слишком много знает о модели Foo, вы можете попробовать переместить эту логику в метод класса в Foo:
Примерно так должно работать:
class Foo < ActiveRecord::Base
def self.find_or_create_or_bar!(name, params)
# ... stuff
find_by_name(name) || create!(params) || bar!
end
end
Затем вы можете проверить это вне пользовательской модели / спецификации.Вы также можете провести интеграционный тест, который обеспечит взаимодействие между пользователем и Foo так, как вы хотите.Вы можете использовать Rspec для этого, но я считаю, что Cucumber лучше подходит, когда в нем больше логики.