Несколько вопросов о капибаре - PullRequest
3 голосов
/ 19 июня 2011

У меня есть несколько вопросов о Капибаре.И я мог бы также спросить здесь, так как RDOC на странице github для Capybara отлично подходит для его настройки и запуска.Но где API или список доступных методов?

Первый. Для файла * _spec.rb, должен ли scenario существовать только один раз?Или можно иметь несколько scenario в одном файле?

Например, в spec/request/user_spec.rb:

require 'spec_helper'

feature 'User actions' do
  background do
    data = {
      :first_name => 'foo',
      :last_name  => 'bar',
      ...
    }

    user = User.new(data, :as => :user)
    user.save
  end

  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

Если с приведенной выше структурой кода что-то не так,или если есть место для улучшения.Я открытая обратная связь.

Второй. Я замечаю с кодом выше.Если у меня config.use_transactional_fixtures = false в spec/spec_helper.rb, это спасет пользователя дважды.Это означает, что в моей тестовой базе данных / пользовательской таблице у меня будет 2 пользователя с именем 'foo bar'.Это нормально?

Третий. У меня есть форма с кнопкой HTML.Когда пользователь нажимает на эту кнопку, jQuery отправляет форму.Как бы я проверил это с Капибарой?Я не думаю, что click_button "Add" подойдет.

Четвертый. Как бы я мог войти в систему пользователей в Капибаре?Я использую Devise.sign_in User.first сделает трюк?И смогу ли я получить доступ к current_user в Капибаре?

Наконец, если кто-нибудь знает какие-либо руководства / учебные пособия по началу работы по Rspec + Capybara.Пожалуйста, укажите.

Ответы [ 2 ]

7 голосов
/ 20 июня 2011

Я также перешел к написанию спецификаций запросов с тех пор, как решил, что мне больше не нравится 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

в конечном счете, вы, конечно, захотите разделить это на более специфические функции.Вероятно, имеется функция «Общедоступная навигация» для всех тестов, касающихся посетителей, просматривающих контент, а затем отдельная функция для входа пользователя и т. Д.

0 голосов
/ 20 июня 2011

Я не знаю о капибаре, но полный список доступных методов можно найти здесь:

http://rubydoc.info/github/jnicklas/capybara/master#

надеюсь, это поможет

...