2011-07-19 4 views
3

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

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

Это моя конфигурация? Поскольку он работает в режиме разработки, я предполагаю, что это не связано с моим кодом 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 

ответ

0

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

С водосвинки, вы должны различать

visit '/' 
click_button 'Login' 

или

visit '/' 
click_link 'Home' 

Смотрите также Capybara-Documentation на GitHub

Смежные вопросы