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

Jan 20
2007 23:09 (Программирование, RSpec, Ruby on Rails) · English (8,713 views)

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

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

gem install fixturease

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

# 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:

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 отзывов на 'Быстрое создание фикстур'

Подписаться на комментарии по RSS или TrackBack на 'Быстрое создание фикстур'.

1
сказал 31.01.2007 в 14.27

WOW !! Really Really interesting !! Thank you !

2
сказал 19.03.2007 в 7.50

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

3
Anton Ageev
сказал 18.03.2008 в 15.21

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

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-аутентификация на блоге.

Оставить отзыв

Вы можете использовать простые теги форматирования HTML (вроде <a>, <ul> and others). Чтобы вставить пример код, используйте <code lang="php">$a = "hello";</code> (поддерживаемые языки: ruby, php, yaml, html, csharp, javascript). Также Вы можете использовать <code>$a = "hello";</code>, синтаксис не будет подсвечен. Если вы не хотите использовать тег <code>, замените символ < на &lt;.

Отправить

 
Copyright © 2005 - 2008, Dmytro Shteflyuk