Опитвам се да тествам автоматичното довършване на jQuery в приложение Rails 3.2, използвайки Selenium. След тази публикация в блог, която създадох fill_autocomplete
помощен метод, който изглежда така:
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
Когато стартирам RSpec, получавам тази грешка:
Failure/Error: fill_autocomplete 'crop', with: 'm'
Selenium::WebDriver::Error::JavascriptError:
$ is not defined
Проблемната линия е page.execute_script %Q{ $('##{field}').trigger('focus') }
spec_helper.rb
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
dev/test група на Gemfile
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
Опитах да понижа RSpec, Capybara и Selenium-Webdriver. Опитах да използвам Capybara-Webkit вместо Selenium. Всичко без резултат.
Работих при предположението, че автоматичното довършване на jQuery се свързва със събитието „keydown“ и че fill_in
на Capybara не задейства това събитие самостоятелно. Дали това е правилно?
Всяко решение или заобиколно решение е добре дошло. Благодаря!
$
. Така че, за да го докажете, направете тест: стартирайте своя автоматизиран тест докато се опита да задейства скрипта. След като сте там, спрете теста. Сега отворете инструментите за разработка на Chrome/Firefox и изпълнете същия скрипт ръчно. На теория трябва да получите същата грешка. Ако е така, това е просто защото$
не винаги ще бъде съпоставено сjQuery
(и е много погрешно винаги да се приема това). - person Arran   schedule 27.07.2014