Rails, state_machine, Rspec, capybara, factory_girl, spork и другое. Часть I.

Решил я, так сказать, ломать свой стереотип разработки. В жизни никогда не писал тестов. А всё прогрессивное человечество пишет. Даже понапридумывало всякие сокращения: TDD, BDD и т.п. Я не собираюсь относить к какой-то категории всё то, что напишу в данном цикле статей. Я просто буду учиться писать тесты. Может кто-то будет учиться вместе со мной (-:

Статей будет несколько. Так что любой желающий сможет всё написанное мной повторить у себя на машине. В этой части я опишу, как настроить среду для запуска тестов, как создать каркас нашего будущего приложения. Ну не буду толочь воду в ступе, приступим.

1. Создадим новый проект:

$ rails new state_machine31
Я его так назвал, так как хотел поиграться со state_machine и на Rails 3.1. Так что вот такое не замысловатое название проекта (-:
$ cd ./state_machine31
2. Вносим изменения в наш Gemfile:

gem ‘state_machine’

gem ‘ruby-graphviz’, :require => ‘graphviz’ # Optional: only required for graphing
gem ‘therubyracer’
gem «rspec-rails», :group => [:test, :development]
group :test do

# Pretty printed test output
gem ‘turn’, :require => false
gem «factory_girl_rails»
gem «capybara»
gem «guard-rspec»
gem «spork»
end
3. Неизменное, после изменения Gemfile:
$ bundle install
4. Запускаем установку Rspec:

$ rails g rspec:install
create  .rspec
create  spec
create  spec/spec_helper.rb

5. В spec_helper.rb вносим такие изменения, всё исключительно на основании рекомендаций разработчиков:
добавляем: require ‘capybara/rspec’
убираем: config.fixture_path = «#{::Rails.root}/spec/fixtures»

6. Теперь давайте сделаем каркас нашего приложения, с которым и будем работать:

$ rails generate scaffold User name:string email:string password:string state:string

В данном случае просто создаётся всё необходимое, для управление простенькой базой пользователей. Информация о пользователе будет состоять из его имени (name), адреса электронной почты (email), пароля(password) и поля состояния(state). Последнее поле state нам необходимо для работы со state_machine, для элементарных функций. У пользователя может быть только 3 состояния: только что созданный(new), активированный (active) и заблокированный(blocked).

7. Самое время запустить настройку guard. Эта консольная утилита следит за изменениями в наших файлах и автоматически запускает соответствующие тесты. Вы полюбите её (-:

$ guard init rspec

Будет создан файл Guardfile в корневой директории нашего приложения.

8. Запускаем первый раз наш guard:

$ guard

Please install rb-inotify gem for Linux inotify support

Using polling (Please help us to support your system better than that.)

Guard is now watching at ‘/home/none/rails/state_machine31′

Guard::RSpec is running, with RSpec 2!

Running all specs

Не тут-то было. Никаких тебе всплывающих подсказок, только куча провальных тестов (-:

9. Добавляем в Gemfile

gem ‘rb-inotify’

gem ‘libnotify’

Затем опять:

$ bundle install

10. Опять запускаем guard, опять видим кучу провальных тестов, но уже с левой стороны всплывающие окошки с указанием, сколько тестов вообще, сколько провальных, сколько понадобилось времени и всё такое. Красота!

В следующий раз я расскажу, как настроить spork, factory_girl и т.п.

Если всё написать за раз — это будет слишком длинное полотно, никто не осилит (-:

 

Недавние записи

Оставить комментарий