【问题标题】:Cucumber + Capybara testing: AJAX RequestForgeryProtection trouble since Rails 4.1Cucumber + Capybara 测试:自 Rails 4.1 以来的 AJAX RequestForgeryProtection 问题
【发布时间】:2014-09-18 22:10:08
【问题描述】:

更新到 Rails 4.1 后,我在一个新项目中遇到了 Cucumber 和 Capybara 的一个有趣问题。

在视图中,我放置了一些缩略图。用户应该单击缩略图链接以接收有关他选择的人的更多信息。通过 AJAX 的魔力,信息会出现在缩略图下方。这是我在视图中的操作方式:

<%= link_to( image_tag( ... ), "/controller/action.js&person=#{@person.nickname}", id: @person.thumb_id , remote: true) %

对于这种情况,控制器遵循通常的程序

respond_to do format.js end

等等。

在浏览器中完美运行,我喜欢它。

但是,Cucumber 和 Capybara 的工作并不顺利。这是让我很头疼的 Capybara 台词:

When(/^I click on one of the portraits to display the person's stuff$/) do
  click_link("jack_sparrow_THUMB") # @user.thumb_id
end

使用 Cucumber 运行场景,我收到上述语句的错误消息:

Security warning: an embedded <script> tag on another site requested protected 
JavaScript. If you know what you're doing, go ahead and disable forgery protection 
on this action to permit cross-origin JavaScript embedding.
(ActionController::InvalidCrossOriginRequest)

问题一定与此有关

http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html

看看提供的 CROSS_ORIGIN_JAVASCRIPT_WARNING ... :(

我能做些什么来让我的测试再次运行,而无需降级到

【问题讨论】:

  • 当前主机和AJAX调用的主机是否相同?
  • 它是 localhost:3000;但也有一些供应商的东西在某处涉及。

标签: ruby-on-rails ajax capybara capybara-webkit


【解决方案1】:

根据 Rails 指南中的“CSRF 保护远程标签”:

在测试的情况下,你也做客户端,从:

获取:索引,格式::js

收件人:

xhr :get, :index, 格式: :js

http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#csrf-protection-from-remote-script-tags

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多