Когда делают я использую, сохраняют!, создайте! и update_attributes! в направляющих?

Я раньше использовал NUnit, но я переключился на MbUnit, так как это имеет больше функций. Я люблю RowTest. Это позволяет Вам параметризовать свои тесты. NUnit действительно имеет разрядную лучшую поддержку инструмента мусора все же. Я использую ReSharper для запущения Тестов MbUnit. У меня были проблемы с TestDriven.NET, выполняющим мои методы SetUp для MbUnit.

60
задан CalebHC 19 November 2009 в 05:27
поделиться

2 ответа

Как правило, вы хотите использовать в своих контроллерах версии без поддержки Bang. Это допускает такую ​​логику:

def update
  @model = Model.find params[:id]
  if @model.update_attributes params[:model] #returns true of false
     # handle success
  else
     # handle failure
  end
end

Я часто использую версии Bang в тестах, когда хочу убедиться, что я знаю, что что-то не проверяется и не сохраняется. Я определенно потратил время на отладку тестов, которые терпели неудачу из-за измененных проверок модели, что было бы очевидно, если бы я использовал версии Bang.

например

it "should do something" do
   m = Model.create! :foo => 'bar' # will raise an error on validation failure             
   m.should do_something
end

С точки зрения отсутствия недопустимых данных в базе данных, вы должны обрабатывать это с помощью проверок ActiveRecord (например, validates_presence_of: user_id ) или определения вашего собственного метода validate в модели. ( http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html ) Это должно предотвратить сохранение, если ваши данные недействительны. Если вы действительно параноик, вы можете добавить некоторые ограничения в свою базу данных. Ознакомьтесь с документацией ActiveRecord :: Migration , чтобы узнать, как настроить уникальные индексы и другие ограничения базы данных в ваших миграциях.

Также, по моему опыту, вы хотите, когда это возможно, избегать использования каких-либо настраиваемых методов сохранения или создания. Если вы повторно реализуете функциональность, включенную в ActiveRecord, вы в конечном итоге заплатите цену в будущем. http://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist может больше сказать по этому поводу.

Также, по моему опыту, вы хотите, по возможности, избегать использования каких-либо специальных методов сохранения или создания. Если вы повторно реализуете функции, включенные в ActiveRecord, вы в конечном итоге заплатите цену в будущем. http://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist может сказать больше по этому поводу.

Также, по моему опыту, вам следует избегать использования каких-либо настраиваемых методов сохранения или создания, когда это возможно. Если вы повторно реализуете функциональность, включенную в ActiveRecord, вы в конечном итоге заплатите цену в будущем. http://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist может сказать больше по этому поводу.

51
ответ дан 24 November 2019 в 17:40
поделиться

Основное отличие заключается в том, как обрабатываются неудачные сохранения. При обновлении класса ActiveRecord версия ! вызовет исключение, если запись недействительна.

Я рекомендую прочитать документацию здесь - http://api.rubyonrails.org/classes/ActiveRecord /Base.html

Использование транзакций также может быть тем, на что стоит обратить внимание - http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

77
ответ дан 24 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: