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_path, params_hash, 'Access-Control-Allow-Origin' => '*' 。我怀疑设置默认值对你不起作用上面? 是的,default_headers 仅适用于 Rails 4。以上是关于Rails capybara 功能规范没有“Access-Control-Allow-Origin”的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 中,我应该在 capybara(或集成)测试中包含用户输入表单错误流吗?
Rails 3.0.9 + Devise + Cucumber + Capybara 臭名昭著的“没有路线匹配 /users/sign_out”