Быстрое создание фикстур

Posted by Dmytro Shteflyuk on under Ruby & Rails · English (14,628 views)

Я злюсь каждый раз, создавая фикстуры для приложения на Rails, так как любое более-менее сложное приложение требует множества фикстур. Наиболее сложная вещь — это отслеживать связи, валидацию, поддерживать фикстуры свежими. Несколько дней назад Юра Рашковский написал маленькую утилитку — Fixturease. Что если я скажу, что сейчас Вы можете создавать фикстуры используя модели?

Для установки gem’а введите:

1
gem install fixturease

Теперь можно попробовать что-нибудь создать:

1
2
3
4
5
6
7
8
9
10
11
12
# Loading Fixturease console for test mode.
@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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
span class="re0"> mike:
 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 позволяет мне расслабиться и получать удовольствие от работы.

3 Responses to this entry

Subscribe to comments with RSS

Van
said on Март 19, 2007 at 07:50 · Permalink

Извиняюсь за оффтоп, подскажи, какой плагин использовал для мультиязычности?

Anton Ageev @
said on Март 18, 2008 at 15:21 · Permalink

С тем же результатом можно написать:

1
2
3
4
5
6
7
8
9
10
span class="re0"> mike:
 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-аутентификация на блоге.

Comments are closed

Comments for this entry are closed for a while. If you have anything to say – use a contact form. Thank you for your patience.