Как заглушить методы ActiveRecord::Base, не делая предположений о том, как они используются?

ActiveRecord::Baseимеет большой старый API с множеством методов как для поиска, так и для сохранения объектов. Например, ваши объекты AR::Bмогли быть созданы несколькими методами:

  • Foo.new(…)
  • Foo.create(…)
  • Foo.find( …)
  • Foo.find_by_sql(…)
  • Foo.find_[all_]by_*(…)
  • bar.foos(ассоциации)
    • …и методы поиска наассоциациях, конечно

Точно так же рассматриваемый объект может быть сохранен несколькими различными методами:

  • foo.createили foo .Создайте!
  • foo.saveили foo.save!
  • фу.update_attributesили foo.update_attributes!

Теперь при написании модульных тестов рекомендуется заглушать вызовы внешних методов, чтобы ваш тест мог сосредоточиться на бизнес-логике рассматриваемого метода. Однако, когда дело доходит до работы с объектами AR::B— например, в модульных тестах контроллера — кажется, что вы должны зафиксировать один из вышеперечисленных методов, когда на самом деле бизнес-логика метод обеспокоен, это не должно быть важно, что вы выберете.

Нужно ли так тесно связывать поведение вашего метода с его реализацией, или я упускаю что-то простое?

9
задан Gareth 15 March 2012 в 11:32
поделиться