Rails capybara 功能规范没有“Access-Control-Allow-Origin”

Posted

技术标签:

【中文标题】Rails capybara 功能规范没有“Access-Control-Allow-Origin”【英文标题】:Rails capybara feature spec No 'Access-Control-Allow-Origin' 【发布时间】:2015-07-22 18:52:50 【问题描述】:

我有一个功能规范,作为页面加载的一部分。 我点击了一个本地网址以获取更多数据。

即使用http://fullcalendar.io/ 它通过 ajax 加载它的事件

   events: 
             url: 'calendar_events.json',
             type: 'GET',
             error: function(response) 
             ...
            ,

我来了

XMLHttpRequest cannot load http://localhost:3000/calendar_events.json?start=2014-01-20&end=2014-01-27. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 404.

不完全确定如何解决。我尝试添加

    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
    response.headers['Access-Control-Request-Method'] = '*'
    response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'

到我的应用程序控制器上的 before_filter 只是为了查看,但仍然遇到同样的问题。

注意:我正在使用 capybara-webkit

【问题讨论】:

***.com/a/6120260/3274024 你可以检查一下,也许这是请求的问题。 真的不想改成jsonp 也许跨域触发就够了。不知道我是否理解你为什么要访问本地 url,你能不能直接在服务器端渲染它? 【参考方案1】:

设置这些的最佳方式是在您的测试环境中,因为您不希望在生产中打开源。

test.rb

  config.action_dispatch.default_headers.merge!(
  
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Allow-Methods' => 'POST, PUT, DELETE, GET, OPTIONS',
      'Access-Control-Max-Age' => "1728000",
     'Access-Control-Allow-Headers' =>'Origin, X-Requested-With, Content-Type, Accept, Authorization'
  )

至于您的问题,我怀疑您在“save_and_open_page”之后收到此错误,在这种情况下,这只是基于您的水豚资产路径的渲染错误,而不是您的测试用例的实际问题。

【讨论】:

你知道为 Rails 3 设置默认标题的方法吗? 对于单个请求,它类似于:“get desired_pa​​th, params_hash, 'Access-Control-Allow-Origin' => '*' 。我怀疑设置默认值对你不起作用上面? 是的,default_headers 仅适用于 Rails 4。

以上是关于Rails capybara 功能规范没有“Access-Control-Allow-Origin”的主要内容,如果未能解决你的问题,请参考以下文章

Rails、Cucumber、Capybara:会话不持久

在 Rails 中,我应该在 capybara(或集成)测试中包含用户输入表单错误流吗?

Rails 3.0.9 + Devise + Cucumber + Capybara 臭名昭著的“没有路线匹配 /users/sign_out”

在规范中使用描述/它优于功能/场景的优势? (除了语法糖)

Rails Cucumber使用Capybara测试AJAX

更新到 Capybara 2.1.0.rc,现在我的功能规范中的 current_path 有问题