Тестирование Cucumber + Capybara: проблема с AJAX RequestForgeryProtection начиная с Rails 4.1

После обновления до 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

и Т. Д.

Прекрасно работает в браузере, и мне это нравится.

Однако огурец и капибара работают не так гладко. Вот строчка 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 ... :(

Могу ли я что-нибудь сделать, чтобы мои тесты снова запускались без перехода на rails ‹4.1 или даже отключения защиты от подделки запросов в целом? Помощь будет очень признательна.


person Perrin-HH    schedule 27.07.2014    source источник
comment
текущий хост и хост, к которому выполняется вызов AJAX, одинаковы?   -  person Lenin Raj Rajasekaran    schedule 27.07.2014
comment
Это localhost: 3000; но есть еще кое-что, что связано с поставщиками.   -  person Perrin-HH    schedule 27.07.2014


Ответы (1)


Согласно «CSRF-защите от удаленных тегов» из руководства по рельсам:

В случае тестов, где вы также выполняете клиент, измените с:

получить: индекс, формат:: js

To:

xhr: get,: index, format:: js

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

person JAR.JAR.beans    schedule 07.10.2014