Ruby on rails 使用Post数据测试XHR的Rails

Ruby on rails 使用Post数据测试XHR的Rails,ruby-on-rails,Ruby On Rails,我只是把我的脚趾伸进Ruby和Rails中,试着让我的头了解整个BDD的事情。我有一个页面,它将AJAX发回一个控制器,该控制器有一个名为“sort”的方法,并传递一个id数组,如下所示 ["song-section-5", "song-section-4", "song-section-6"] 我想为此编写一个测试,所以我想出了如下方法: test "should sort items" do xhr :post, :sort end post :index, xhr: true 但

我只是把我的脚趾伸进Ruby和Rails中,试着让我的头了解整个BDD的事情。我有一个页面,它将AJAX发回一个控制器,该控制器有一个名为“sort”的方法,并传递一个id数组,如下所示

["song-section-5", "song-section-4", "song-section-6"]
我想为此编写一个测试,所以我想出了如下方法:

test "should sort items" do
  xhr :post, :sort
end
post :index, xhr: true
但是不知道如何通过阵列。有什么帮助吗?

来自Rails

该方法的第三个输入是“参数”。这些是发送到控制器的参数

xhr :post, :sort, { :ids => ["song-section-5", "song-section-4", "song-section-6"] }

对于我来说,使用RSpec 3.6和Rails 5.1,前面的答案失败了:

xhr :post, :index

# => NoMethodError: undefined method `xhr' for #<RSpec::ExampleGroups::XController::Index::AJAXRequest:0x007fd9eaa73778>
背景 以下是表格中的相关代码。设置
xhr
标志将添加以下标题:

if xhr
  @request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
  @request.fetch_header("HTTP_ACCEPT") do |k|
    @request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
  end
end
答案 我是怎么得到答案的? 现代Rails堆栈更喜欢使用集成测试而不是控制器测试,因此您将使用
ActionDispatch::IntegrationTest
。如果要发送post请求,只需传入
xhr:true


这里是到源代码的链接,指向的线索,其中包含您正在寻找的答案。

Sweet。比我想象的要简单。谢谢注意<代码>xhr在rails 5中被弃用。改用
xhr:true
选项。⬆️⬆️⬆️ 你,真正的MVP+1,我花了这么长时间才找到这个,非常感谢!我是以下例子:
xhr:post,:index
我希望你知道你刚刚帮我省了一个小时的时间。我升级到Rails5,但不明白为什么会出现这种情况。
if xhr
  @request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
  @request.fetch_header("HTTP_ACCEPT") do |k|
    @request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
  end
end
test "should sort items" do
  post path_to_your_sort_action, params: { ids: ["song-section-5", "song-section-4", "song-section-6"] }, xhr: true, 
end
# using Rails +6 and minitest