1

Selenium을 사용하는 Rails 3.2 앱에서 jQuery 자동 완성을 테스트하려고합니다. this blog post 다음 나는이처럼 보이는 fill_autocomplete 도우미 메서드를 만들었습니다

Failure/Error: fill_autocomplete 'crop', with: 'm' 
Selenium::WebDriver::Error::JavascriptError: 
    $ is not defined 

문제 라인은 page.execute_script %Q{ $('##{field}').trigger('focus') }


입니다 : 내가 RSpec을 실행하면

def fill_autocomplete(field, options = {}) 
    fill_in field, with: options[:with] 

    page.execute_script %Q{ $('##{field}').trigger('focus') } 
    page.execute_script %Q{ $('##{field}').trigger('keydown') } 
end 

,이 오류가 발생합니다

spec_helper.rb

Gemfile의 5,
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'coveralls' 
require 'simplecov' 
require 'capybara' 

include Warden::Test::Helpers 

SimpleCov.configure do 
    add_filter 'spec/' 
end 
Coveralls.wear!('rails') 

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    config.use_transactional_fixtures = true 

    config.infer_base_class_for_anonymous_controllers = false 

    config.order = "random" 

    config.include Devise::TestHelpers, :type => :controller 
    config.extend ControllerMacros, :type => :controller 
end 

개발/테스트 그룹

내가 RSpec에, 카피 바라, 그리고 셀레늄 - Webdriver을 다운 그레이드하려고했습니다
group :development, :test do 
    gem 'haml-rails'      
    gem 'rspec-rails', '~> 2.12.1'  
    gem 'webrat'       
    gem 'capybara', '~> 2.4.1'    
    gem 'selenium-webdriver', '~> 2.42.0' 
    gem 'factory_girl_rails', '~> 4.0'  
    gem 'coveralls', require: false  
end 

. Selenium 대신 Capybara-Webkit을 사용해 보았습니다. 모두 소용 없다.

jQuery 자동 완성이 'keydown'이벤트에 연결되고 Capybara의 fill_in이이 이벤트를 자체적으로 트리거하지 않는다는 가정하에 작업했습니다. 이 올바른지?

모든 해결책이나 해결 방법을 환영합니다. 감사!

+2

'$'에 매핑 된 jQuery가없는 것처럼 들립니다. 이를 입증하기 위해 테스트를 해보십시오 : 스크립트가 실행될 때까지 ** 자동 테스트를 실행하십시오. 일단 시험을 중단하십시오. 이제 Chrome/Firefox의 개발 도구를 열고 ** 동일한 스크립트를 수동으로 실행하십시오. ** 이론 상으로는 같은 오류가 발생합니다. 그렇다면 단지'$'가 항상'jQuery'에 매핑되지 않을 것이기 때문입니다 (그리고 항상 그렇게 생각하는 것은 매우 잘못되었습니다). – Arran

+0

디버깅 조언 덕분에 JQuery가 정의되기 전에 JS에서 오류가 발생했다는 것을 알 수있었습니다. – niftygrifty

답변

2

Arran의 조언 덕분에 JQuery를 정의하기 전에 JS의 다른 부분에서 오류가 발생한다는 것을 깨달았습니다.

관련 문제