Ruby on rails 使用Post数据测试XHR的Rails
我只是把我的脚趾伸进Ruby和Rails中,试着让我的头了解整个BDD的事情。我有一个页面,它将AJAX发回一个控制器,该控制器有一个名为“sort”的方法,并传递一个id数组,如下所示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 但
["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