Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Given /^I am signed in$/ do
user = Factory(:user)
visit new_user_session_path
fill_in 'user[email]', :with => user.email
fill_in 'user[password]', :with => user.password
click_button I18n.t('formtastic.actions.enter')
Then %{I should be on the home page}
Then %{I should see "#{ I18n.t 'devise.sessions.user.signed_in' }"}
end
$ rspec spec
...
Finished in 20.92 seconds
45 examples, 0 failures
$ cucumber
...
102 scenarios (102 passed)
986 steps (986 passed)
3m24.668s
Then 'WTF?' do
puts page.body
end
Функционал: Админ может добавлять, удалять и изменять статьи
Что бы админ мог управлять статьями
Как администратор сайта
Я должен иметь возможность удалять, добавлять и изменять статьи
Как пользователь
Я должен видеть отредактированные статьи
Предыстория:
Допустим админ существует
И админ авторизован
Сценарий: добавление новой статьи
И видит список статей в админзоне
Если создать новую статью с заголовком "bbb" url "my-new-article" и телом "bla-bla-bla"
То увидим в списке статей заголовок "bbb"
Сценарий: редактирование существующей статьи
И существует статья с заголовком "bbb" url "my-new-article" и телом "bla-bla-bla"
Если admin редактирует статью "bbb" и сохраняет тело "no-blabla"
То пользователь должен увидить тело статьи "no-blabla" по адресу "/articles/my-new-article"
Сценарий: удалить существующую статью foo
И существует статья foo с url foo
И статья с url foo опубликована
Если админ удаляет статью с урл foo
То юзер в списке статей не видит статью "foo"
When /^admin edit article (.*) and save content (.*)$/ do |url, content|
visit edit_admin_article_url(Article.find_by_url(url))
fill_in 'article[body]', :with=>content
click_button "Сохранить статью"
response.should be_success
end
Given /^статья с url (.*) опубликована$/ do |url|
@article = Article.find_by_url(url)
@article.published.should be_true
visit "/articles/#{url}"
response.should be_success
end
When /^админ удаляет статью с урл (.*)$/ do |url|
delete admin_article_url(Article.find_by_url(url))
end
Then /^юзер в списке статей не видит статью "(.*)"$/ do |article|
visit "/articles"
assert_not_contain article
end
Given /^посетитель открывает страницу "([^\"]*)"$/ do |page|
visit page
end
When /^посетитель нажмет на ссылку "([^\"]*)"$/ do |link|
click_link link
end
Then /^посетитель нажмет на ссылку (.*)$/ do |link|
assert_contain link
click_link link
end
Then /^перейдет на страницу статьи (.*)$/ do |title|
@article = Article.find_by_title(title)
visit article_url(@article.url)
end
Given /^посетитель открывает страницу статей$/ do
visit articles_path
end
Then /^увидит полный текст "(.*)" статьи с названием (.*)$/ do |body, title|
assert_contain(body)
assert_contain(title)
end
Rails: Хватит отмазываться, начинаем BDD-ить!