Тестирование входа в систему с Capybara / Rspec - PullRequest
1 голос
/ 16 марта 2011

У меня возникли сложности при тестировании процедуры входа в систему. В настоящее время у меня есть следующая спецификация запроса:

     describe "GET /admins" do
        before(:each) do
          @admin = Factory.create(:user, :winery => nil, :email => 'admin@example.com', :admin => true)
          @attr = { :email => @admin.email, :password => @admin.password }
        end


    it "should log admin users in" do
      visit admin_path
      post_via_redirect admin_path, :session => @attr
      save_and_open_page
      page.should have_content('Admin Dashboard')
    end
  end

Это не удалось, и страница save_and_open_page просто показывает мою страницу входа (я могу нормально войти на свой сайт разработки, поэтому сам код работает) Я также попытался написать спецификацию, используя Capybara, чтобы заполнить форму и нажать кнопку входа в систему, с той же ошибкой. Мне удалось написать проходную спецификацию на огурце, но только с селеном.

с помощью: Капибара (0.4.1.2) Rspec (2.5.0) рельсы rspec (2.5.0) рельсы (3.0.5)

спасибо

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Вы должны использовать чистых помощников Капибары, post_via_redirect - это метод Rails.Сначала вы захотите заполнить форму, а затем нажмите какую-нибудь кнопку отправки, например:

visit admin_path
fill_in "Login", :with => "username"
fill_in "Password", :with => "password"
click_button "Submit"

Ваше последнее утверждение, я бы точнее сказал, в каком селекторе должен отображаться контент, напримерэто:

within_scope("h1") do
  page.should have_content('Admin Dashboard')
end

Теперь вы тестируете правильно!

0 голосов
/ 17 марта 2011

Попробовав различные способы проверить это как в Rspec, так и в огурце, я, наконец, обнаружил, что сам себя навязал.
В моей форме (с использованием haml и formtastic) у меня было следующее:

 = semantic_form_for @session, :as => :session, :url => { :action => "create" } do |form|
    = form.inputs do
      = form.input :email, :label => "Email"
      = form.input :password, :label => "Password"
    %fieldset.buttons
      %ol
        %li
          %button(name = "commit" type = "commit" value = "Login")Log In

Это работало в Chrome и Firefox (и если сценарий был помечен как @selenium), но в моих тестах, пока проходили шаги fill_in и click_button, действие Create в моем контроллере не вызывалось.Изменив код для моей кнопки следующим образом:

   = form.input :password, :label => "Password"
    = form.buttons do
      = form.commit_button "Log In"

Позволяет пройти мои тесты.Не уверен в причине, но, по крайней мере, я могу продолжить свои интеграционные тесты

...