рд░реЗрд▓: рдмрд╣рд╛рдиреЗ рдмрдирд╛рдирд╛ рдмрдВрдж рдХрд░реЛ, BDD рд╢реБрд░реВ рдХрд░реЛ!

рдпрд╣рд╛рдБ рдХреМрди рд╣реИ?



рдЬрдм рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЙрддреНрдкрд╛рдж рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ, рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЗрдЦрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдирдпрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рддреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдРрд╕реА рдмрд╛рддреЗрдВ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ:



 11:24:21 PM рдорд╛рдЗрдХрд▓: рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреНрд╕, рдореБрдЭреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреА
 11:24:24 PM рдорд╛рдЗрдХрд▓: рд╢рд╛рдпрдж рдмреЗрд╣рддрд░
 11:24:27 PM рдорд╛рдЗрдХрд▓: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ
 11:24:36 PM рдорд╛рдЗрдХрд▓: рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдореБрдЭреЗ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ
 11:24:38 PM рдорд╛рдЗрдХрд▓: рдЖрд▓рд╕реНрдп рд╢рд╛рдпрдж :)


рдХреНрдпрд╛ рд╡рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИ? " рд╕рдордЭрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреЛрдИ рд╕рдордп рдирд╣реАрдВ рдлрд┐рд░ рдкрдврд╝реЗред рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдмреАрдбреАрдбреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд░реЗрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдЬреАрд╡рди (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╢реБрд░реВ рдХрд░реЗрдВред



рд╕реНрд░реЛрдд рдбреЗрдЯрд╛



рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдЦрд░реЛрдВрдЪ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрд░рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рд░рд╣рд╛ рд╣реИ (рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЪрд▓рдиреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ)ред рд░реВрдмреА рдФрд░ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдмрд╛рддред рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЬреЛ рднреА рдореЗрдХреЛрдЬрд╝ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдХрдВрд╕реЛрд▓, рд╢рд╛рдпрдж)ред рдореВрд▓ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рднреВрд▓ рдЬрд╛рдУред

рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдВ:



$ rvm gemset create bdd $ rvm gemset use bdd
      
      





рд╕рдм рдХреБрдЫ, рдХреЛрдИ рдЬрд╛рдо рдирд╣реАрдВ, рд╢реБрджреНрдз рд╕реНрдерд╛рдиред рд╣рдордиреЗ рдЕрдВрддрд┐рдо рд░реЗрд▓ рд▓рдЧрд╛рдИ:



 $ gem install rails --no-ri --no-rdoc ... 23 gems installed
      
      





рдЕрдВрддрд┐рдо рджреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдмрд░реНрдмрд╛рдж рди рд╣реЛ рдФрд░ рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рди рдбрд╛рд▓реЗрдВред рдореИрдВрдиреЗ рд╣рд░ рд╕рдордп рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЗрд╕рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдпрд╣ рдмрд╛рдд .gemrc рдХреЛ рднреЗрдЬреА :



 $ echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
      
      





рдорд╣рд╛рди, рд░реЗрд▓ рд╣реИрдВред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╣рдо рд╕рдВрд╕реНрдХрд░рдг 3.0.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рд╣рдо рд╕рднреА рдЬрд╛рдо рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ



рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ:



 $ rails new bdd
      
      





рддреБрд░рдВрдд Gemfile рдЦреЛрд▓реЗрдВ, рдЬреЛ рд░реВрдЯ рдкрд░ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдЦреБрд▓рддрд╛ рд╣реИ, рддреЛ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЧрд▓рдд рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░, TextMate рдХреЛ рд╣рдЯрд╛ рджреЗрдВ - MacVim рдбрд╛рд▓ рджреЗрдВ (рд╕рднреА рд╡рд┐рд╖рдп рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдлрд┐рд░ рдореИрдВ рдЪреБрдк рд╣реВрдВ)ред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝реЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрдХрдбрд╝реА рдФрд░ RSpec , рд╕рд╛рде рд╣реА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрд╣рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред



 source 'http://rubygems.org' gem 'rails', '3.0.3' gem 'mysql2' group :development, :test do gem 'rspec-rails' gem 'cucumber-rails' end group :test do gem 'capybara' gem 'database_cleaner' gem 'factory_girl_rails' gem 'email_spec' gem 'timecop' gem 'launchy' end
      
      





рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЕрдм рд╣рдо рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:



 $ bundle install ... Your bundle is complete!..
      
      





рддреБрд░рдВрдд Gemfile рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд░реЗрд▓реНрд╕ рдЬреИрдо (рдПрдХ рдЬреЛ рдкрд╣рд▓реЗ рдмрд╣реБрдд рд╣реИ) рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Gemfile.lock рд╣реИ ред

RSpec рдХреЗ рд╕рд╛рде рд░реЗрд▓ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд:



 $ rails g rspec:install
      
      





рд╣рдо рдХрдХрдбрд╝реА рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдпреЛрдЧ рд╕реЗ, рдирдП рдмрдиреЗ RSpec рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рд╣реИред Capybara рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ (рд╣рд╛рдБ, рдФрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо):



 $ rails g cucumber:install --rspec --capybara
      
      





рдЖрдЗрдП рдХреБрдЫ рдкреВрд░реНрд╡рддрд╛ рд▓рд╛рдПрдВ:



 $ echo '--colour --format documentation' > .rspec
      
      





рдЙрд╕рдХреЗ рдмрд╛рдж, RSpec рдПрдХ рд╕реБрдВрджрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Open config / cucumber.yml рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ :% s / рдкреНрд░рдЧрддрд┐ / рд╕реБрдВрджрд░ / g ( рд╕реБрдВрджрд░ рдХреЗ рд╕рд╛рде рд╢рдмреНрдж рдкреНрд░рдЧрддрд┐ рдХреЛ рдмрджрд▓реЗрдВ)ред

рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкреНрд░рдЬреНрд╡рд▓рд┐рдд рдХрд░реЗрдВ (рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЪрд╛рдирдХ рдХреБрдЫ) рдФрд░ рдЕрдиреНрдп рдХрдЪрд░рд╛:



 $ echo 'test' >> .gitignore $ echo '*.swp' >> .gitignore $ echo '.DS_Store' >> .gitignore
      
      





рдЬреЛ рдХреБрдЫ рднреА рд╣рдордиреЗ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЬреАрдЖрдИрдЯреА рдореЗрдВ рдбрд╛рд▓реЗрдВрдЧреЗ (рдпрд╣рд╛рдВ рднреА рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд░ рдХреЛрдИ рдЕрдВрдХрд▓ рд▓рд┐рдиреБрд╕ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ):



 $ git init . $ git add . $ git commit -m 'Bare Rails 3.0.3 application with BDD environment'
      
      





рддреЛ, рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдЗрдб рд╕реЗ рджрд╛рд▓рдЪреАрдиреА рдХреЗ рд╕рд╛рде cappuccino рд╣реИ, рд╣рдо рд╕реАрдзреЗ BDD рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ, рдореИрдВ рднреА рдЗрд╕ рджреБрд╖реНрдЯ рд░рд╛рдХреНрд╖рд╕ (рд╢рд╛рдВрддрд┐ рд╕реЗ, рд╡рд╣ рдЕрдЪреНрдЫрд╛) рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдБред рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЧреВрдЧрд▓ред



рдХреМрди рд╣реИ рдХреМрди?



рдХрдХрдбрд╝реА


https://github.com/aslakhellesoy/cucumber

рддреЛ, рдХрдХрдбрд╝реА рдЙрд░реНрдл рдХрдХрдбрд╝реА, " рд╕реБрдВрджрд░ рдФрд░ рд╣рд░реНрд╖рд┐рдд BDD " рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ , рдЬреЛ рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рдкрд░реНрдпрд╛рдкреНрдд рдЖрдирдВрдж рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рд┐рд╕рд╛рдмред RSpec рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд╣ рд╕рдХрддреЗ рдереЗред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрди рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬреЛ рд╕рд┐рд░реНрдл рдЧреАрдереВрдм рдкрд░ рдХреБрдЫ рд╡рд┐рдХреА рдкреГрд╖реНрда рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдлреИрд▓рд╛рдпрд╛ рдирд╣реАрдВ, рдмрд╕ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд░реЗрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рди рддреЛ рдЖрд░рдПрд╕рдкреАрдИрд╕реА рдФрд░ рди рд╣реА рдХрдХрдбрд╝реА рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╣реИрдВред

рд╡рд╛рдкрд╕ рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП ред рдпрд╣ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (" рдЧреНрд░рд╛рд╣рдХ, рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ " рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝реЗрдВ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрдгрди рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢реБрд░реБрдЖрдд рдирд╣реАрдВ рд╣реИред рдХрдХрдбрд╝реА рдореЗрдВ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреЛ " рд╕реБрд╡рд┐рдзрд╛ " ( рд╕реБрд╡рд┐рдзрд╛ ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╕рднреА рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдирд╛рдо * .feature рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдлреАрдЪрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ " рдкрд░рд┐рджреГрд╢реНрдп " рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ / step_definitions / * _ steps.rb рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░рдг рд╣реИрдВ: рджрд┐рдП рдЧрдП (рдХреБрдЫ рджрд┐рдП рдЧрдП, рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд┐рдд), рдЬрдм (рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдлрд┐рд░ (рдкрд░рд┐рдгрд╛рдо, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛), рд▓реЗрдХрд┐рди рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд▓рд╛рдЗрд╡ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдмреЛрд▓рдирд╛ред рдореЗрд░реА рдЕрдВрддрд┐рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдПрдирдЬреА рдкрд░ рдореИрдВрдиреЗ рдЯреАрд╡реА рдкрд░ рд╕реБрдирд╛ " рдореИрдВ рдЬрд╛рджреВрдЧрд░ рдирд╣реАрдВ рд╣реВрдВ, рдореИрдВ рдХреЗрд╡рд▓ рд╕реАрдЦрддрд╛ рд╣реВрдВ ... ", рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВ):



 @javascript @redis
 рдлрд╝реАрдЪрд░: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рдСрдирд▓рд╛рдЗрди рд╣реИ
   рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдкреЛрд░реНрдЯрд▓ рдЬреАрд╡рд┐рдд рд╣реИ
   рдПрдХ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ
   рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рдСрдирд▓рд╛рдЗрди рд╣реИ

   рдкреГрд╖реНрдарднреВрдорд┐:
     рдЕрдиреБрднрд╛рдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП "рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░реЛрдлрд╛рдЗрд▓" рдореМрдЬреВрдж рд╣реИ

   рдкрд░рд┐рджреГрд╢реНрдп рд░реВрдкрд░реЗрдЦрд╛: рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЧреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдмрд▓ рджреЗрдЦреЗрдВ
     рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рднреА рдкреЛрд░реНрдЯрд▓ рдкрд░ рдмрд╣реБрдд рд╕рдордп рд╕реЗ рдирд╣реАрдВ рд╣реИ
     рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ: "<рдирд╛рдо>"
     рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "<name>" <user рдХреНрд░рд┐рдпрд╛> рдкреЛрд░реНрдЯрд▓
     рдФрд░ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "<name>" рдХреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ
     рдлрд┐рд░ рдореБрдЭреЗ <"рдореЗрд░рд╛ рдирд╛рдо> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рд▓реЗрдмрд▓ <рдХрд╛рд░реНрд░рд╡рд╛рдИ> рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
     рдЬрдм рдореИрдВ рдЕрдиреБрднрд╛рдЧ "рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░реЛрдлрд╛рдЗрд▓" рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ
     рдлрд┐рд░ рдореБрдЭреЗ <"рдореЗрд░рд╛ рдирд╛рдо> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рд▓реЗрдмрд▓ <рдХрд╛рд░реНрд░рд╡рд╛рдИ> рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

     рдЙрджрд╛рд╣рд░рдг:
       |  рдирд╛рдо |  рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ |  рдореЗрд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ |
       |  рд╡рд┐рдХреНрдЯреЛрд░рд┐рдпрд╛ |  рджреМрд░рд╛ |  рджреЗрдЦреЗрдВ |
       |  рдорд╛рдЗрдХрд▓ |  рдпрд╛рддреНрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ |  рдирд╣реАрдВ рджреЗрдЦрд╛ |


" рдлрд╝реАрдЪрд░ " рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ, рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдиреАрдЪреЗ рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХрд╣рддреА рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ, рдХреМрди рдФрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред " рдкреГрд╖реНрдарднреВрдорд┐ " рдЦрдВрдб, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЪрд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдпрд╛ рддреЛ " рдкрд░рд┐рджреГрд╢реНрдп " рдпрд╛ " рдкрд░рд┐рджреГрд╢реНрдп рд░реВрдкрд░реЗрдЦрд╛ " рд╣реИред рдкрд╣рд▓рд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдиреАрдЪреЗ " рдЙрджрд╛рд╣рд░рдг " рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдХреБрддреНрддреЗ ( @ ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЯреИрдЧ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреВрд░реА рд╕реБрд╡рд┐рдзрд╛ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЗрдВ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдкрдардиреАрдп рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд▓рд┐рдпрд╛, рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рд╛ рдФрд░ рдЗрд╕реЗ рдмрд┐рдирд╛ рддрдирд╛рд╡ рдХреЗ рдкрдврд╝рд╛, рд╕рдм рдХреБрдЫ рд╕рдордЭрд╛, рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХреА: тАЬ рдпрд╣! "

рдХрдХрдбрд╝реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ / рд╕рдорд░реНрдерди / env.rb рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред



RSpec


https://github.com/rspec/rspec

RSpec рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ рдЦреБрджрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдореЙрдбрд▓ рдЙрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкрдиреА рдЖрд╢рд╛рдУрдВ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИ, рддреЛ RSpec рдПрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ " рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкрд╣рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЕрдкрдирд╛ рдИ-рдореЗрд▓ рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб, рд╕рдлрд▓ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦрд╛ рд╣реИ, " рдпрд╣ рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП рд╣реИ ред рдЖрдо рд▓реЛрдЧреЛрдВ рдореЗрдВ RSpec рдХреА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ " рдпреБрдХреНрддрд┐ " ( рдпреБрдХреНрддрд┐ , рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд▓реНрдкрдирд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ * _spec.rb рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдкреЗрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд░реЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( рдореЙрдбрд▓ , рдХрдВрдЯреНрд░реЛрд▓рд░ , рд╣реЗрд▓реНрдкрд░реНрд╕ рдЗрддреНрдпрд╛рджрд┐) рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдиреБрдХрд░рдгреАрдп рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



 describe User do it { should ensure_length_of(:email).is_at_least(6).is_at_most(100) } it { should validate_format_of(:email).with('ma1f0rmed emai1 address') } subject { Factory :user } it { should validate_uniqueness_of :email } it { should validate_uniqueness_of :address } end
      
      





рдпрд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдХрдВрдзреЗ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд╢реНрдорд╛ рдЗрд╕ рддрд░рд╣ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред

RSpec рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпреБрдХреНрддрд┐ / spec_helper.rb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП env.rb рдХреА рддрд░рд╣, рд╕рднреА рд╕рд╣рд╛рдпрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдпрд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВред



Capybara


https://github.com/jnicklas/capybara

Capybara " рдмреНрд░рд╛рдЙрдЬрд╝рд░ " рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рд╣реИ ред Google рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧрд┐рдиреА рдкрд┐рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЬрд╛рдо рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХрдИ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЪреАрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд▓рд┐рдВрдХ, рдлрд╝реЙрд░реНрдо рднрд░рдирд╛ (рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА, рдЪреЗрдХрдмреЙрдХреНрд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣), рдкреГрд╖реНрда рдкрд░ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдЖрдк рдЗрд╕реЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд░рд╣рд╕реНрдпрдордп рдирд╛рдо рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рдореЗрдВ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЦреБрд▓реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдХреНрд░реЛрдо рдФрд░ рдкреЗрдЬ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЪрд▓реЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбреАрдмрдЧ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдЗрд╕рдиреЗ рдЦреБрдж рд╣реА рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдХрд░ рдФрд░ рдЧрд┐рд░рд╛рдХрд░ рдПрдХ рдкреЗрдЬ рдкрд░ рдПрдХ рд╕реВрдЪреА рдХреА рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рдБрдЪ рдХреАред рд╕реЗрд▓реЗрдирд┐рдпрдо рдПрдХрдорд╛рддреНрд░ рдЗрдВрдЬрди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреИрдкреНрдпрдмрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдЬреЗрдпреВрдмреА рдЬреИрд╕реЗ рд╢рд╛рдирджрд╛рд░ рдХреБрдЫ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк) рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЧрдзреЗ рдореЗрдВ рднреА рдХреБрдЫ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдХрдХрдбрд╝реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ env.rb рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ ( рд╕реЗрд▓реЗрдирд┐рдпрдо рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ):



 Capybara.register_driver :selenium do |app| Capybara::Driver::Selenium.new app, :browser => :chrome end
      
      







рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓реАрдирд░


https://github.com/bmabey/database_cleaner

рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд╛рдоред рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдФрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ MySQL + ActiveRecord , рдФрд░ mongoDB + Mongoid рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ред

рдпрджрд┐ рдпрд╣ рдЬрд╛рдо рдЬреЗрдордлрд╛рдЗрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп, рдХрдХрдбрд╝реА рдЕрдкрдиреЗ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ env.rb рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ , рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:



 require 'database_cleaner' DatabaseCleaner.strategy = :truncation Before do DatabaseCleaner.clean end
      
      





RSpec рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд spec_helper.rb рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╣реИ):



 config.before(:suite) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.clean end
      
      







рдлреИрдХреНрдЯрд░реА рдЧрд░реНрд▓ рд░реЗрд▓


https://github.com/thoughtbot/factory_girl_rails

рдУрд╣, рдФрд░ рд▓рдбрд╝рдХрд┐рдпрд╛рдВ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИрдВ! рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдореЙрдбрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреА рдЬрдЧрд╣ рджреЗрдирд╛, рдЕрдЧрд░ рд╡рд╣ рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рдмрддрд╛рддрд╛ рд╣реИ)ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ ( рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ), рдФрд░ рд▓реЗрдЦ ( рд▓реЗрдЦ ), рдФрд░ рдХрд╛рд░реНрдпреЛрдВ ( рдХрд╛рд░реНрдп ) рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( рдкреНрд░реЛрдЬреЗрдХреНрдЯ ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рди рдмрдирд╛рдПрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдХрд╛рд░рдЦрд╛рдиреЗ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╛рд░ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдИ рдЗрдХрд╛рдЗрдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред RSpec рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ , рдХрд╛рд░рдЦрд╛рдиреЗ рдЖрдорддреМрд░ рдкрд░ рдХрд▓реНрдкрдирд╛ / рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдпрд╛ рд╕реАрдзреЗ рдХрд▓реНрдкрдирд╛ / factory.rb рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ:



 Factory.define :user do |factory| factory.sequence(:email) { |i| "user#{ i }@example.org" } factory.password 'password' factory.password_confirmation { |user| user.password } factory.confirmed_at Time.now end
      
      





рдпрд╣реА рд╣реИ, рдЕрдм рдлреИрдХреНрдЯрд░реА (: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрд░реНрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред



рдИрдореЗрд▓ рдпреБрдХреНрддрд┐


https://github.com/bmabey/email-spec

рдЖрдкрдиреЗ рдЕрднреА рдирд╛рдо рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдХрдХрдбрд╝реА рдФрд░ RSpec рджреЛрдиреЛрдВ рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред Env.rb рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 require 'email_spec' # add this line if you use spork require 'email_spec/cucumber'
      
      





Spec_helper.rb рдореЗрдВ:



 require "email_spec"
      
      





рдЕрдЧрд▓рд╛:



 $ rails g email_spec:steps
      
      





рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрджрдо рдЬреЛрдбрд╝реЗрдВред



Timecop


https://github.com/jtrupiano/timecop

рдореБрдЭреЗ рдпрд╣ рдмрд╛рдд рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рд╕рдордп рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХреБрдЫ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЗрд╕ рдкреБрд▓рд┐рд╕ рд╡рд╛рд▓реЗ рдХреЗ рдкрд╛рд╕ рдЖрдпрд╛ ред рдпрд╣ рдЕрдкреВрд░рдгреАрдп рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╕рдордп рдкрд░ рдмрдВрдзреЗ рдХреБрдЫ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, " рдУрд╡рди рдореЗрдВ рдПрдХ рдкрд╛рдИ рдбрд╛рд▓рддреЗ рд╣реБрдП, рдЪрд╛рд░ рдШрдВрдЯреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдЕрдВрдЧрд╛рд░реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ ред" рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рджреЗрдЦрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ (рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ), рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП рдХрджрдо рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рд╣рд╛рдВ, рдЦреАрд░реЗ рдФрд░ рдЖрд░рдПрд╕рдкреАрдИрд╕реА рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд▓реЗрдмрд▓), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @travel_through_time рддрд╛рдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ рдЙрдирдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВ, рдФрд░ рддрдм рдЙрдкрдХрд░рдг рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдореЗрд░реЗ рдкрд╛рд╕ env.rb рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ:



 After('@travel_through_time') do Timecop.return end
      
      





рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХрдбрд╝реА рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдмрддрд╛рддреА рд╣реИрдВред RSpec рдореЗрдВ, рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



Launchy


https://github.com/copiousfreetime/launchy

рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдореИрдВ рдПрдХ рдкреГрд╖реНрда рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдХрдбрд╝реА рдХреЛ " рдХреНрд░рд┐рдПрдЯ " рдмрдЯрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдо рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрдХрдбрд╝реА рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:



 Then 'WTF?' do  save_and_open_page end
      
      





рдлрд┐рд░ рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рдо рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдЪрд┐рдд рдХрджрдо рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗ рдЧрдП рдкреГрд╖реНрда рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╢рд┐рд▓рд╛рд▓реЗрдЦ " рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ ", рдРрд╕рд╛ рдХреБрдЫред



рд╕реНрд╡рд┐рдЪ рдореЗрдВ:% s / рдмрдЧ / рдХреБрдВрдЬреА / g



рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдирдХрд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЯреНрдпреВрди рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рд╣рд╛рде рдореЗрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рди рдХреЗрд╡рд▓ рдХреЛрдб рдкрддреНрд░ рд▓рд┐рдЦрдирд╛, рд╕рднреА рдЬреАрд╡рди, umm рд╣рд╛рдБред рд▓реЗрдХрд┐рди, BDD рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рджреЗрдЦрд╛), рдореИрдВ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдмрд╛рдж рдореЗрдВ, рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ), рддреЛ рдЖрдк рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд╛рдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдм рдореБрдЭреЗ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдЬрдм рд░реЗрд▓ рдЦрд░рд╛рдм рдорд╛рдУрд╢реА рдХреЗ рд╕рднреА рджрд┐рдорд╛рдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж, рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдФрд░ рдЪрд╢реНрдорд╛ рд╣рдореЗрд╢рд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рддрдм рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ:



 $ rspec spec $ cucumber
      
      





рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рдпрд╛ рдЖрдкрдХреЗ рд╕рд╛рдереА ... рдПрдХ рд╢рдмреНрдж рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд▓рд┐рдЦреВрдВрдЧрд╛ рдпрджрд┐ рд╡рд┐рд╖рдп рдХрд┐рд╕реА рдХреЗ рддрд░рдХрд╢ рдХреА рдЖрддреНрдорд╛ рдХреЗ рдкрддрд▓реЗ рддрд╛рд░ рдХреЛ рдЫреВрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ, рдпрд╣ рд╕реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред



рд╕рдВрджрд░реНрдн (рдЬреИрд╕реЗ рд╕реНрдХреВрд▓ рдореЗрдВ)



рдХрдХрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



RSpec рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



рд░рдпрд╛рди рдмреЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



рдЯрд┐рдордХреЛрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



RVM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



Git рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:



 // vim: set ft = habrahabr



All Articles