ActiveRecord::Base
имеет большой старый API с несколькими методами для поиска и сохранения объектов.Например, ваши AR::B
объекты могут быть созданы из нескольких методов:
Foo.new(…)
Foo.create(…)
Foo.find(…)
Foo.find_by_sql(…)
Foo.find_[all_]by_*(…)
bar.foos
(ассоциации) - … и методы поиска на ассоциации, конечно
Аналогично, рассматриваемый объект может сохраняться несколькими различными способами:
foo.create
или foo.create!
foo.save
или foo.save!
foo.update_attributes
или foo.update_attributes!
Теперь при написании модульных тестов рекомендуется заглушать вызовы внешних методов, чтобы ваш тест могсосредоточиться на бизнес-логике рассматриваемого метода.Тем не менее, когда дело доходит до работы с AR::B
объектами - например, в модульных тестах контроллера - кажется, что вы должны выполнить один из вышеперечисленных методов, когда на самом деле, что касается бизнес-логики метода, это не должноне важно, какой вы выберете.
Вам нужно так тесно связать поведение вашего метода с его реализацией или я упустил что-то простое?