Я злюсь каждый раз, создавая фикстуры для приложения на Rails, так как любое более-менее сложное приложение требует множества фикстур. Наиболее сложная вещь — это отслеживать связи, валидацию, поддерживать фикстуры свежими. Несколько дней назад Юра Рашковский написал маленькую утилитку — Fixturease. Что если я скажу, что сейчас Вы можете создавать фикстуры используя модели?
Для установки gem’а введите:
Теперь можно попробовать что-нибудь создать:
@mike = User.create(:login => 'mike', :password => 'pass')
# <User:0x482ac18 @new_record_before_save=true, @attributes={"id"=>5, "password"=>"pass", "login"=>"mike", "created_at"=>Sat Jan 20 21:40:23 +0200 2007}, @errors=#<ActiveRecord::Errors:0x4827b08 @base=#<User:0x482ac18 ...>, @errors={}>, @new_record=false>
@mike_post_1 = @mike.posts.create(:name => 'first post by mike')
# <Post:0x4811bb4 @new_record_before_save=true, @attributes={"name"=>"first post by mike", "updated_at"=>Sat Jan 20 21:40:38 +0200 2007, "id"=>3, "user_id"=>5, "created_at"=>Sat Jan 20 21:40:38 +0200 2007}, @errors=#<ActiveRecord::Errors:0x4811510 @base=#<Post:0x4811bb4 ...>, @errors={}>, @new_record=false>
@mike_post_2 = @mike.posts.create(:name => 'second post by mike')
# <Post:0x48099dc @new_record_before_save=true, @attributes={"name"=>"second post by mike", "updated_at"=>Sat Jan 20 21:40:45 +0200 2007, "id"=>4, "user_id"=>5, "created_at"=>Sat Jan 20 21:40:45 +0200 2007}, @errors=#<ActiveRecord::Errors:0x48093d8 @base=#<Post:0x48099dc ...>, @errors={}>, @new_record=false>
exit
# Saving fixtures:
# User [./spec/fixtures/users.yml]: mike
# Post [./spec/fixtures/posts.yml]: mike_post_1 and mike_post_2
В этом простом примере мы создали одну фикстуру для модели User с именем mike, и две для модели Post с именами mike_post_1 и mike_post_2:
id: 5
password: pass
login: mike
created_at: 2007-01-20 21:40:23.250000 +02:00
mike_post_1:
name: first post by mike
updated_at: 2007-01-20 21:40:38.765000 +02:00
id: 3
user_id: 5
created_at: 2007-01-20 21:40:38.765000 +02:00
mike_post_2:
name: second post by mike
updated_at: 2007-01-20 21:40:45.562000 +02:00
id: 4
user_id: 5
created_at: 2007-01-20 21:40:45.562000 +02:00
Вы всегда можете загрузить фикстуры в текущую среду используя команду load_fixtures! (или параметр командной строки -l). Это позволяет использовать ранее созданные фикстуры для построения новых.
Мне нравятся юнит-тесты, но я ненавижу писать фикстуры. Этот простой gem позволяет мне расслабиться и получать удовольствие от работы.
Русский
English
WOW !! Really Really interesting !! Thank you !
Извиняюсь за оффтоп, подскажи, какой плагин использовал для мультиязычности?
С тем же результатом можно написать:
password: pass
login: mike
mike_post_1:
name: first post by mike
user: mike
mike_post_2:
name: second post by mike
user: mike
А еще у вас сломана openid-аутентификация на блоге.