2014-09-04 100 views
14

我有一个使用了poltergeist和水豚的大型测试套件。我不断收到以下错误:当js_errors:false时,Poltergeist会抛出JS错误

One or more errors were raised in the Javascript code on the page. If you don't care about 
these errors, you can ignore them by setting js_errors: false in your Poltergeist 
configuration (see documentation for details). 

我很确定我设置了js_errors:false,但我仍然收到错误。我意识到最佳解决方案是修复JS,但我继承了遗留代码,修复了错误超出了我的角色范围。我的规范助手文件看起来像这样:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/poltergeist' 
Capybara.javascript_driver = :poltergeist 

Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, {js_errors: false}) 
end 

Capybara.current_driver = :poltergeist 

Capybara.configure do |config| 
    config.match = :one 
    config.exact_options = true 
    config.ignore_hidden_elements = true 
    config.visible_text_only = true 
end 

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



RSpec.configure do |config| 
    config.infer_base_class_for_anonymous_controllers = false 
    config.order = "random" 
end 

我很困惑要去哪里或者我是否忽略了JS错误。让我知道是否有其他任何我可能忽略或忽略的信息。谢谢你的时间。

回答

24

我不确定为什么你的代码不起作用。我也有类似的JS错误,并做了以下(上this page提到(搜索js_errors)) - 基本上什么莱昂纳多Galani建议(我upvoted莱昂纳多的回答是采取从-1到0):

require 'capybara/poltergeist' 
Capybara.javascript_driver = :poltergeist 

options = {js_errors: false} 
Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, options) 
end 

我还测试了这种风格,和它的工作还有:

Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, {js_errors: false}) 
end 

FWIW:我的错误(黄瓜测试)是这样的:

Capybara::Poltergeist::JavascriptError: One or more errors were raised in the 
Javascript code on the page. If you don't care about these errors, you can ignore 
them by setting js_errors: false in your Poltergeist configuration (see 
documentation for details). 

TypeError: Unable to delete property. 
TypeError: Unable to delete property. 
    at :84 
    at http://maps.gstatic.com/cat_js/maps-api-v3/api/js/17/20/%7Bmain,geometry%7D.js:19 in Ke 
    at http://maps.gstatic.com/cat_js/maps-api-v3/api/js/17/20/%7Bmain,geometry%7D.js:19 in Ke 
    at http://maps.gstatic.com/cat_js/maps-api-v3/api/js/17/20/%7Bmain,geometry%7D.js:18 
-2

如果您仅使用register_driver的一个选项,则不需要散列。

另外你也不是js_errors:false而是:js_errors => false 或者你可以在外面设置散列,这样你可以添加更多的选项,如果你将来需要的话。

options = {:js_errors => false} 
Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, options) 
end 
+0

您能否在答案中添加更多解释? – 2014-11-12 20:40:27

+5

这与问题本身的代码完全相同。 1.8.7 hashrocket语法:key => value与key:value相同。 – HaaR 2015-02-27 11:51:12

+2

这个答案有误导性。 ':js_errors => false'与'js_errors:false'相同。然而删除选项散列中的其他参数,只是包括这一个修正了我的错误。 – Sean 2015-04-14 09:41:49

3

@Leonardo Galani

根据ruby风格指南,您的语法评论是不正确的。所以答案也可以是{js_errors:false}。

https://github.com/bbatsov/ruby-style-guide#hash-literals

+1

下次再添加一个评论:) – Sean 2015-04-14 09:42:22

+1

@Sean由于缺乏声誉,这是不可能的,但感谢您的注意。 (至少50,评论其他人的帖子) – LiveNL 2015-04-14 13:40:43

相关问题