Почему я не могу получить селен с капибарой? - PullRequest
3 голосов
/ 19 июля 2011

Я пытаюсь проверить пользователя, нажимающего на кнопку, которая делает вызов ajax.Когда я вручную нажимаю на него в моем браузере, он ведет себя как ожидалось, т.е. поведение кнопки по умолчанию игнорируется и вместо этого он получает результаты через ajax, которые затем добавляются на страницу.

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

Это мой конфиг?Так как он работает в режиме разработки, я предполагаю, что это не из-за моего кода jquery, поэтому для краткости это не отображается.

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0.rc4'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'
gem 'omniauth', '~>0.2.0'
gem 'pusher'
gem 'youtube_it'
gem 'simple_form'

# Asset template engines
gem 'sass-rails', "~> 3.1.0.rc"
gem 'coffee-script'
gem 'uglifier'


gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do

  gem "shoulda"  
  gem "factory_girl_rails"  
  # Pretty printed test output
  gem 'turn', :require => false
  gem 'mocha'
end

group :development do
    gem 'rails3-generators'
  gem "autotest"
end

group :development, :test do 
  gem "capybara", :git => 'git://github.com/jnicklas/capybara.git'
  gem "launchy"
  gem "haml-rails"
  gem "database_cleaner"
end

или мой test_helper

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'shoulda/rails'
require "capybara/rails"


class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
  #
  # Note: You'll currently still have to declare fixtures explicitly in integration tests
  # -- they do not yet inherit this setting
  fixtures :all

  OmniAuth.config.test_mode = true

  # Add more helper methods to be used by all tests here...
  def login_in(user)
    @request.session[:user_id] = user.id
  end


  def should_redirect_unauthorized
     assert_redirected_to root_path
     assert_match /you need to login/i, flash[:alert]
  end
end


module ActionController
  class IntegrationTest
    include Capybara::DSL

    self.use_transactional_fixtures = false

    setup do
      DatabaseCleaner.strategy = :truncation
      DatabaseCleaner.start #workaround for capybara / selenium. See capybara docs
    end


    teardown do
      DatabaseCleaner.clean #workaround for capybara / selenium. See capybara docs
    end

      #signup using twitter, facebook for authentication
    def signup_using(provider)
      OmniAuth.config.add_mock(provider.to_sym, {'uid' => "123456"})

      visit '/'
      page.click_link("#{provider}_auth")

      assert_match /\/users\/\d+\/edit/, current_path
      assert page.find("#flash").has_content?("Welcome to")
    end

    #login into existing account using twitter, facebook
    def login_using(service)
      OmniAuth.config.add_mock(service.provider.to_sym, {'uid' => service.uid})
      visit '/'
      page.click_link("#{service.provider}_auth")
      assert page.find("#flash").has_content?("Welcome back")
      assert_equal rooms_path, current_path
    end

    def login_and_visit_room(service, room) 
      login_using(service)
      visit_room(room)
    end

    def visit_room(room)
      visit room_path(room)
      assert_equal room_path(@room.id), current_path
    end     
  end
end

или блоки настройки в моем интеграционном тесте

require 'test_helper'


class PlaylistStoriesTestTest < ActionDispatch::IntegrationTest
  fixtures :all

  setup do 
    Capybara.current_driver = :selenium
    @user = Factory(:user)
    @service = @user.services.create(:provider => "twitter", :uid => "123456")
    @room = Factory(:room)
  end

  ....

 teardown do 
    Capybara.use_default_driver
      DatabaseCleaner.clean #workaround for capybara / selenium. See capybara docs
  end
end

1 Ответ

0 голосов
/ 04 декабря 2012

С Capybara вы не должны путаться с разницей между ссылкой (даже если она выглядит как кнопка) и кнопкой (например, «отправить»).Вы не указали содержимое файла просмотра, но я полагаю, вы используете кнопку, а не ссылку.

С капибарой вы должны различать

visit '/'
click_button 'Login'

или

visit '/'
click_link 'Home'

См. Также документацию Capybara на GitHub

...