我对RoR很新,最近开始学习BDD / Rspec来测试我的应用程序。我一直在寻找一种规范AJAX请求的方法,但到目前为止我还没有找到很多文档。
任何人都知道如何做到这一点?我正在使用rails 2.3.8,rspec 1.3.0和mocha 0.9.8作为我的存根(我也正在学习......)
答案 0 :(得分:106)
如果您正在谈论在控制器规格中进行测试,那么您通常会调用
get :index
要对索引操作发出HTTP请求,您可以调用
xhr :get, :index
使用GET对索引操作发出XmlHttpRequest(AJAX)请求。
答案 1 :(得分:26)
自从Rails 5.0(使用RSpec 3.X)以来,请尝试像这样设置xhr: true
:
get :index, xhr: true
这是ActionController::TestCase中的相关代码。设置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
答案 2 :(得分:4)
Rails 5和rspec>的语法改变了一点。 3.1(我相信)
用于POST请求:
post :create, xhr: true, params: { polls: { question: 'some' } }
您现在需要明确设置params
用于GET请求:
get :action, xhr: true, params: { id: 10 }
表示rails 4和rspec< = 3.1
xhr post :create, { polls: { question: 'some' } }
GET请求:
xhr get :show, id: 10