Я также перешел к написанию спецификаций запросов с тех пор, как решил, что мне больше не нравится Cucumber.
ONE) Наличие нескольких сценариев действительно хорошо.Вы можете использовать все другие замечательные возможности rspec, поэтому я бы предложил также использовать контексты, как в коде внизу.
TWO) Возможно, это можно решить с помощью Rspec Set Gem И самоцвет для очистки базы данных.Также: Исходное обоснование для Set
Предупреждение: убедитесь, что вы правильно настроили DatabaseCleaner при использовании set.Моя собственная установка (которая может быть немного излишней, но работает для меня):
config.before(:suite) do
DatabaseCleaner.clean_with :truncation
end
config.before(:all) do
DatabaseCleaner.clean_with :truncation
end
config.after(:all) do
DatabaseCleaner.clean_with :truncation
end
config.after(:suite) do
DatabaseCleaner.clean_with :truncation
end
THREE) да!Нажмите кнопку "Добавить" должно работать! Полный API-интерфейс для капибары полезен, но мне потребовалось некоторое время, чтобы впасть в панику.Наиболее важными являются действия и средства сопоставления rspec.
пример:
click_button "Add"
page.should have_content("Successfully Added")
Вы можете сузить область видимости с помощью искателей элементов.
FOURTH) Devise предоставляет помощников.есть помощник sign_in.читать докс :).Вот демонстрация:
feature 'User actions' do
background do
data = {
:first_name => 'foo',
:last_name => 'bar',
...
}
@user = User.new(data, :as => :user)
@user.save
end
context "no user is signed in" do
scenario 'User can browse home page' do
visit root_path
page.should have_content('Homepage')
end
scenario 'User should not be able to visit the dashboard' do
visit dashboard_root_path
page.should have_content('You are not authorized to access this page.')
end
end
context "user is signed in" do
before :each do
sign_in @user
end
[more scenarios]
end
end
в конечном счете, вы, конечно, захотите разделить это на более специфические функции.Вероятно, имеется функция «Общедоступная навигация» для всех тестов, касающихся посетителей, просматривающих контент, а затем отдельная функция для входа пользователя и т. Д.