рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

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

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


рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛


рдЖрдк рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг (рдЯреЗрд╕реНрдЯ рдпреВрдирд┐рдЯ, Rspec, рдХрдХрдбрд╝реА рдФрд░ рдЖрджрд┐) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Rspec рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдПрдХ рд╕реБрдВрджрд░ рд░реВрдк рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрдб рдХреЗ рд░реВрдк рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рд░рддреНрди рдореЗрдВ, рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдЬреЛрдбрд╝реЗрдВ:

group :development, :test do
gem "rspec-rails", ">= 2.5"
end


рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ: "рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ rspec рдХреНрдпреЛрдВ рдЬреЛрдбрд╝реЗрдВ?" рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - rspec рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рдордЪрд╛рди рдкреИрджрд╛ рдХрд░рддреЗ рд╕рдордп рдЙрдЪрд┐рдд рдЪрд╢реНрдорд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрд▓реЛ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рдкрдирд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

rails g rspec:install

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

group :test do
gem 'guard-rspec'
end


рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

guard init .
guard init rspec


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

gem 'libnotify' , :require => false if RUBY_PLATFORM =~ /linux/i
gem 'rb-inotify', :require => false if RUBY_PLATFORM =~ /linux/i
gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i


рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рд╢рдд рдкрд░рд┐рдХрд▓рди рдХреЗ рд╕рд╛рде rspec рдореЗрдВ рдмрджрд▓реЗрдВ:

gem 'fuubar'

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЧрд╛рд░реНрдбрдлрд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:

guard 'rspec', :cli =>'--format Fuubar --color'

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рдХрдВрд╕реЛрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕реБрдВрджрд░ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╡рд┐рддреНрд░рддрд╛ рджреЗрдирд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЛрдИ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдорд╛рди рдФрд░ рд░рд┐рдХреЙрд░реНрдб рднрд░ рдЬрд╛рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдордгрд┐ database_cleaner рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

config.before(:each) do
DatabaseCleaner.start
end

config.after(:each) do
DatabaseCleaner.clean
end


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

group :test do
gem 'guard_rspec'
gem 'factory_girl_rails'
gem 'database_cleaner'
end


рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд╣рд░ рд▓рд┐рдВрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ

рдЦреБрдж рдХреЛ рдкрд░рдЦ рд░рд╣рд╛ рд╣реИ


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

"рдХреИрдкрд┐рдмрд╛рд░рд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХреАрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ рд░реЗрд▓, рд╕рд┐рдирд╛рддреНрд░рд╛ рдпрд╛ рдореЗрд░рдм рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рд╣реИред Capybara рдЕрдиреБрдХрд░рдг рд╢реЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред "

рдЬреЛ рд╕рдЪрдореБрдЪ рд▓рдЧрддрд╛ рд╣реИ:

"Capybara рдЧрд┐рдиреА рдкрд┐рдЧ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред"

рдЗрд╕реЗ рдордгрд┐рдн рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдпреБрдХреНрддрд┐ / test_helper.rb рдореЗрдВ Capybara рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

require 'capybara/rspec'

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЖрднрд╛рд╕реА рдкреГрд╖реНрда рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╣реЗрд░рдлреЗрд░ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

рдкреГрд╖реНрда рдХрд╛ рджреМрд░рд╛ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

visit '/'

рд▓реЛрдЕрд░рдХреЗрд╕ рдкрддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рд░реЗрд▓ рдкрде рд╕рд╣рд╛рдпрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:

visit car_wheels_path(car)

рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрд▓рдн рдкреГрд╖реНрда рд╡рд╕реНрддреБ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрднрд╛рд╕реА рдкреГрд╖реНрда рд╣реИред рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╢рд░реАрд░ рд╡рд┐рдзрд┐ рдХреА рдУрд░ рдореБрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

puts page.body

рдЪрд▓реЛ рд╣реЗрд░рдлреЗрд░ рдХрдорд╛рдВрдб рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб fill_in рд╡рд┐рдзрд┐ рд╕реЗ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ id, рд╡рд░реНрдЧ, рдирд╛рдо рддрддреНрд╡ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:

fill_in 'car_manufacture', :with=>'Audi'
fill_in 'car[model]', :with=>'A4'


рдЪрдпрди рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрдпрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж, рдХреЗрдкреА), рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИ:

'рд╕рд┐рд▓реНрд╡рд░',: рд╕реЗ => 'рдХрд╛рд░ [рд░рдВрдЧ] рдЪреБрдиреЗрдВ

рдЪреЗрдХ, рдЕрдирдЪреЗрдХ, рдЪреБрдирдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЪреЗрдХрдмреЙрдХреНрд╕ рдФрд░ рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рд╡реЗ рдХреЗрд╡рд▓ рддрддреНрд╡ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

check 'car[full_package]'
choose 'car[year][2010]'


рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрдИ рддрддреНрд╡ рд╣реИрдВ, рдпрд╛, рднрдЧрд╡рд╛рди рди рдХрд░реЗрдВ, рдЖрдИрдбреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд▓реЙрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдЦреЛрдЬ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИ:

within 'form#payment_card' do
#
end


рдмрдЯрди рдФрд░ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ - рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ (рдХреНрд▓рд┐рдХ_рдСрди) рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ (рдХреНрд▓рд┐рдХ_рд▓рд┐рдВрдХ, рдХреНрд▓рд┐рдХ_рдмрдЯрди):

click_on 'submit_form'
click_link 'read_more'


рдЕрдм рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред DOM рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, has_selector рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ:

page.should have_selector('table tr')

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрди рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рд╕рдм рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдЧрд┐рдирддреА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ:

page.should have_selector('table tr', :count=>3)

рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рддрддреНрд╡ рд╕реНрд╡рдпрдВ fazhn рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдкреГрд╖реНрда .have_content рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧреА рд╣реИ?

page.should have_content(тАЬAudi clubтАЭ)

рд▓реЗрдХрд┐рди js рдХрд╛ рдХреНрдпрд╛?


рдХреБрдЫ рдЪрд╢реНрдорд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдХрд╛рдкреАрдмрд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ js рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдХрд╛рд░рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдпрд╣ рдХрджрдо рдЙрдард╛рдпрд╛ред рдЬрдм рд╣рдорд╛рд░реЗ рдкреЗрдЬ рдХреЛ рдкреВрд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо js рд╕реНрдкреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

it 'should have many js', :js=>true do
visit тАж
end


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

Capybara.javascript_driver :webkit

рдЕрдм capybara рдПрдХреАрдХреГрдд рдкрд░реАрдХреНрд╖рдг рдЬрд▓реНрджреА рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рднрд░ рдореЗрдВ рдЖрдП рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред Has_selector рдФрд░ has_content рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣рдореЗрд╢рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА, рдкрд╣рд▓реЗ, рдЦреЛрдЬ рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

first('div.info').should be

all('tr.ads').should have(3).items


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдЯрди рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдФрд░ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

first('div.catalog').click
find('p#info).click


рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреИрдкрд┐рдмрд╛рд░рд╛ рдпрд╣рд╛рдБ рдХрд╛рдо рдЖрдПрдЧрд╛:

page.execute_javascript тАЬalert('Hello world')тАЭ

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдХрд╡рд╛рд╕ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ - "рдареАрдХ рд╣реИ, рдЬреЗрдПрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?" рдФрд░ рдЙрддреНрддрд░ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдХреНрд▓рд┐рдХ рдФрд░ рдЪрдпрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

page.execute_javascript '$(тАЬp.long_textтАЭ).hover();'

рдЗрд╕ рддрд░рд╣ рд╣рдордиреЗ рдХрд░реНрд╕рд░ рдХреЗ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд░ рд╣реЛрд╡рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ред

рдЬреАрд╡рди рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛

рдФрд░ рдореЗрд░реА рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗред рдХрд┐рд╕реА рднреА js рд╡реЗрдм рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде capybara, database_cleaner рдФрд░ factory_girl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдмрдирд╛рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧ:

config.use_transactional_fixtures = false

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд╛рд▓ rspec рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдЬреЛ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдорд╛рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд╣реИред рдлреЛрдХрд╕ рд╕рдорд╛рдпреЛрдЬрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

config.filter_run :focus=>true
config.run_all_when_everything_filtered = true


рдЙрд╕рдХреЗ рдмрд╛рдж, рдмреНрдпрд╛рдЬ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛: рдлрд╝реЛрдХрд╕ => рд╕рддреНрдп рдФрд░ рд╕реНрдкреЗрдХреНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


Capybara
рдХреИрдкреАрдмрд╛рд░рд╛ рд╡реЗрдмрдХрд┐рдЯ
рдбреЗрдЯрд╛ рдмреЗрд╕ рдХреНрд▓реАрдирд░
рдлреИрдХреНрдЯреНрд░реА рдХреА рд▓рдбрд╝рдХреА рдкрдЯрд░реА рд╕реЗ рдЙрддрд░реА
рдЧрд╛рд░реНрдб

Source: https://habr.com/ru/post/In130766/


All Articles