2011-07-19 21 views
3

我试图测试用户点击一个按钮,使ajax调用。当我在浏览器中手动点击它时,它的行为与预期相同,即忽略按钮的默认行为,而是通过ajax获取结果,然后将结果添加到页面中。为什么不能让硒与水豚踢

但是,当我运行我的测试使用水豚,点击按钮后,它重定向到按钮操作。看来硒没有踢进去。我不知道为什么。

它是我的配置吗?由于它在开发模式下工作Im假设这不是由于我的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上