QuasarLog: День первый + Знакомство с FactoryGirl
апреля 27, 2012 | Published in CMS, QuasarLog | 10 Comments
О QuasarLog’е
В этой рубрике я буду писать о прогрессе в разработке Quasar и некоторых интересных вещах, которые вот уже реально могут быть полезны читателям RubyDev. Например в этом посте мы рассмотрим код FactoryGirl фабрики для модели User из Quasar. Об этом я уже писал в нашей группе во вконтакте. Если хотите быть в курсе развития проекта и RubyDev, то вот вам:
За первый день разработки удалось сделать следующее:
- Настроить тестовое окружение: RSpec + FactoryGirl + Spork + Guard + DatabaseCleaner
- Установить Device и CanCan и кое-как настроить Devise (это еще не принципиально).
- Написать спеки для модели User и создать фабрику FactoryGirl.
- Написать код по спекам.
Прогресс QuasarCMS можно наблюдать здесь:
Планы на сегодня:
Спеки и код для модели Document, связка Document -> Document, Document -> User.
Фабричная девченка — FactoryGirl
# spec/factories/user.rb FactoryGirl.define do factory :user do sequence(:nickname) { |n| "user_#{n}" } sequence(:email) { |n| "email_#{n}@email.com" } first_name 'Test' last_name 'User' password '123456' password_confirmation '123456' factory :reader_user do role 'reader' end factory :admin_user do role 'admin' end factory :moderator_user do role 'moderator' end end end
FactoryGirl — это простой и удобный DSL для замены традиционных фикстур (fixtures) фабриками объектов. Задача фабрики объектов — плодить экземпляры моделей для тестов. Например приведенную выше фабрику мы можем использовать в спецификациях RSpec:
describe User do #... describe 'helpers' do before :all do @user = FactoryGirl.create :reader_user @admin = FactoryGirl.create :admin_user @moderator = FactoryGirl.create :moderator_user end describe "reader" do subject { @user } its(:full_name) { should == "#{@user.first_name} #{@user.last_name}" } its(:is_reader?) { should be_true } end #... end end
Код FactogyGirl достаточно понятен. Используются одноименные с именами свойств модели методы для объявления этих самых свойств порождаемых записей. Метод sequence позволяет генерировать случайные значения свойств. Каждая фабрика объявляется внутри блока кода передаваемого в метод factory. После того, как вы создали фабрику, вы можете легко ее использовать:
FactoryGirl.create :factory_name # создает и сохраняет в БД запись соответствующую фабрике factory_name. FactoryGirl.build :factory_name # метод аналогичен .create, но запись в БД не происходит. FactoryGirl.attributes_for :factory_name # возвращает хэш формата { attribute: value } для свойств.
Мы будем более подробно рассматривать FactoryGirl в следующих постах QuasarLog’а.
апреля 27, 2012 at 22:36 (#)
А мне вот fabrication поинтереснее и почище показался, хотя в принципе одно и то же
апреля 28, 2012 at 12:16 (#)
Михаил, честно говоря не пробовал, да и FactoryGirl как-то поближе уже. Нужно будет на досуге посмотреть.
апреля 28, 2012 at 17:13 (#)
Читал ваши спеки
# security
it «allow mass assignment of *role*» do
should allow_mass_assignment_of :role
end
Егор Хомяков за вами выехал ….
апреля 29, 2012 at 02:21 (#)
Валентин, Егор нам понадобится, когда проект будет готов. Это все — совсем сырой код.
апреля 29, 2012 at 18:26 (#)
it has
it doesn’t
it validates
it belongs
it allows
я не умничаю, просто глаза режет :)
апреля 29, 2012 at 19:01 (#)
UseRifle, это понятно, что глаголы с s пишутся для He/she/it, но вот в shoulda_matchers именно belong_to, allow_… и т.д. называются матчеры и потому приходится дублировать это описание в описаниях примеров.
апреля 29, 2012 at 19:49 (#)
Владимир, ну так все правильно
it belongs to
vs.
it should belong to
апреля 30, 2012 at 13:12 (#)
Михаил, ты прав, затупил. Уже поправил.
июля 23, 2012 at 18:50 (#)
не понял, мы тут английский учим или FactoryGirl?
аффтар, пиши больше о фабричной девочке!
апреля 26, 2014 at 17:00 (#)
[quote]Установить Device и CanCan и кое-как настроить Devise (это еще не принципиально).[/quote]
Бро, не путай народ, Devise же…