2016-03-19 6 views
1

Есть ли способ распечатать операции ActiveRecord, вызванные FactoryGirl.create?Как распечатать вызовы Model.create, сделанные FactoryGirl.create?

Скажите, что у нас есть завод :foo модели Foo. Запуск FactoryGirl.create(:foo), создает запись в базе данных для модели Foo и некоторых других записей для различных моделей, скажет Bar, Car и т.д.

Есть ли способ, в котором мы могли бы превратить эту FactoryGirl.create(:foo) команды в ее основные Model.create команд?

Например

FactoryGirl.create(:foo) 

должны ворваться в

Foo.create(name: 'some name', ...) 
Bar.create(field_value: 'asdf', ....) 
Car.create(field_value: 'asdf1231', ....) 
... 
+1

Что вы хотите делать с основными операциями? Печатать их? Запустить их отдельно? Что-то другое? –

+0

Я хочу напечатать эти команды –

+1

Если это для отладки, почему бы просто не посмотреть на сгенерированный SQL в log/test.log? –

ответ

3

factory_girl называет save!, когда он создает модель, так что вы можете получить по крайней мере часть пути туда перекрывая save! в каждой из ваших моделей. Поместите это в config/initializers/print_model_save.rb:

class ActiveRecord::Base 
    alias_method :original_save!, :save! 

    def save! 
    puts "#{self.class.name}.create! #{attributes.symbolize_keys.inspect}" 
    original_save! 
    end 

end 

Это будет работать для простых атрибутов. Сложные атрибуты могут потребовать более сложной печати аргументов. Попробуй и посмотри.

+0

Этот подход работает, если я попытаюсь запустить 'Foo.create()'. Но это не работает с 'FactoryGirl.create (: foo)' –

+0

Awesome. Отличное решение. –

Смежные вопросы