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

3

我有一个功能规格说明,作为页面加载的一部分。我访问本地URL以获取更多数据。

例如,使用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。


你可以查看这个链接:https://dev59.com/dm025IYBdhLWcg3wRDq8#6120260,也许那就是请求出错的原因。 - jfornoff
不想将其更改为jsonp。 - dboyd68
也许跨域触发器就足够了。我不确定为什么你要访问本地 URL,难道你不能直接在服务器端渲染它吗? - jfornoff
1个回答

2

最好在测试环境中设置这些内容,因为您不希望在生产环境中开放源。

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”之后出现了此错误。在这种情况下,这只是一个基于您的capybara asset_path而不是测试用例实际问题的渲染错误。


你知道如何为Rails 3设置默认标头吗? - nesiseka
对于单个请求,它大致是这样的:"获取所需路径、参数哈希、{'Access-Control-Allow-Origin' => '*'}。我怀疑根据上述情况设置默认值没有起作用?" - Allan W Smith
是的,default_headers 只适用于 Rails 4。 - nesiseka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接