Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 黑名单上特定的恶鬼要求URI,因此水豚不会';不要失败_Ruby On Rails_Phantomjs_Cucumber_Capybara_Poltergeist - Fatal编程技术网

Ruby on rails 黑名单上特定的恶鬼要求URI,因此水豚不会';不要失败

Ruby on rails 黑名单上特定的恶鬼要求URI,因此水豚不会';不要失败,ruby-on-rails,phantomjs,cucumber,capybara,poltergeist,Ruby On Rails,Phantomjs,Cucumber,Capybara,Poltergeist,Poltergeist接受黑名单和白名单,同时将其配置为水豚的驱动程序。文件规定: Poltergeist支持URL黑名单,允许您阻止脚本在指定域上运行 虽然这很好,但这无助于解决我想阻止某些资产被请求/加载的问题,因为这会导致Travis CI出现问题,这些资产返回500个服务器错误,并导致我的测试失败,即使它们应该是绿色的 URI应被阻止为: ['/stylesheet/*','some image name.jpg'] 这可能与恶鬼有关吗?或者有没有办法让水豚黄瓜测试不会因为资产返回500

Poltergeist接受
黑名单
白名单
,同时将其配置为水豚的驱动程序。文件规定:

Poltergeist支持URL黑名单,允许您阻止脚本在指定域上运行

虽然这很好,但这无助于解决我想阻止某些资产被请求/加载的问题,因为这会导致Travis CI出现问题,这些资产返回500个服务器错误,并导致我的测试失败,即使它们应该是绿色的

URI应被阻止为:
['/stylesheet/*','some image name.jpg']

这可能与恶鬼有关吗?或者有没有办法让水豚黄瓜测试不会因为资产返回500服务器错误而失败

Capybara.register_driver :poltergeist do |app|
  poltergeist_opts = {
    window_size: [1280, 1024],
    url_blacklist: ['/stylesheets/select_box_arrow.gif', '/stylesheets/ui-icons_ffffff_256x240.png']
  }

  Capybara::Poltergeist::Driver.new(app, poltergeist_opts)
end

Poltergeist黑名单被指定为通配符字符串(*和.作为特殊字符),这些字符串与所请求的完整url匹配,因此是的,您可以通过在
url\u黑名单
数组中精确指定问题中显示的内容来阻止所需的特定内容。但是,如果500错误来自您的应用程序,您最好只修复您的应用程序/测试设置,以便在请求有效资产时不会返回服务器错误(修复travis上的资产部署等)


另一个选项是防止Capybara在服务器错误测试中失败-
Capybara.raise\u server\u errors=false
-但是这可能会隐藏您关心的服务器错误。

感谢您让我知道
Capybara.raise\u server\u errors
。虽然不是一个理想的长期解决方案,但它将在中期解决问题。我还尝试了
url\u黑名单
,在我的配置中为Poltergeist,但它似乎仍然在获取这些资产。我已经调整了我的问题,以包含相关的代码片段。@ManBearPixel-hmm,它肯定会阻止它们,所以不确定您在那里出了什么问题。您是否有任何正在重置黑名单的before块?您可以调用
page.driver.network\u traffic('blocked')
获取所有被阻止请求的数组,而
page.driver.network\u traffic
将为您提供未被阻止的请求。您可以查看这些URL并比较它们,看看它们是否是您所认为的。另一个问题是,为什么您的服务器返回500作为不存在的资产,实际上应该是404或其他什么。@另一个可能的问题是,您没有运行足够新版本的Poltergeist来实际支持黑名单?你使用的是什么版本的Poltergeist和PhantomJS?@ManBearPixel另外,你确定这些资源实际上是从你认为的URL加载的吗?如果使用rails资产管道,那么在测试和生产环境中,这些资产通常会以类似于
/assets/-select\u box\u arrow.gif
的形式加载。幸运的是,我使用的是单片应用程序体系结构,可以处理facepalm中的请求。幸运的是,我们正在做一些工作,慢慢地从当前的路由迁移出去,但在此之前,情况就是这样在哪里设置page.driver.network\u流量?我会运行一个
binding.pry
并调用该方法进行调查吗?--恶灵是
v1.6.0
PhantomJS是
v1.9.8
是的,正常情况下,这些将在正常的资产管道中,但如上所述。。。这是一种特殊类型的应用程序体系结构。