如何使用RSpec / RoR测试AJAX请求?

时间:2010-10-19 18:04:32

标签: ruby-on-rails ajax testing rspec mocha

我对RoR很新,最近开始学习BDD / Rspec来测试我的应用程序。我一直在寻找一种规范AJAX请求的方法,但到目前为止我还没有找到很多文档。

任何人都知道如何做到这一点?我正在使用rails 2.3.8,rspec 1.3.0和mocha 0.9.8作为我的存根(我也正在学习......)

3 个答案:

答案 0 :(得分:106)

如果您正在谈论在控制器规格中进行测试,那么您通常会调用

get :index

要对索引操作发出HTTP请求,您可以调用

xhr :get, :index

使用GET对索引操作发出XmlHttpRequest(AJAX)请求。

答案 1 :(得分:26)

Rails 5

自从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