English 中文(简体)
How do you test an AJAX request with RSpec/RoR?
原标题:

I m fairly new to RoR and recently started learning BDD/Rspec for testing my application. I ve been looking for a way to spec an AJAX request, but so far I haven t found much documentation on this at all.

Anyone know how to do this? I m using rails 2.3.8, rspec 1.3.0 and mocha 0.9.8 for my stubs (which I m also in the process of learning...)

问题回答

If you re talking about testing it inside your controller specs, where you normally call

get :index

to make an HTTP request to the index action, you would instead call

xhr :get, :index

to make an XmlHttpRequest (AJAX) request to the index action using GET.

Rails 5 / 6

Since Rails 5.0 (with RSpec 3.X), try setting xhr: true like this:

get :index, xhr: true

Background

Here s the relevant code in the ActionController::TestCase. Setting the xhr flag ends up adding the following headers:

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

Syntax changed a bit for Rails 5 and rspec > 3.1(i believe)

for POST requests:

post :create, xhr: true, params: { polls: { question:  some  } }

you now need explicitely set params

for GET requests:

get :action, xhr: true, params: { id: 10 }

for rails 4 and rspec <= 3.1

xhr post :create, { polls: { question:  some  } }

GET requests:

xhr get :show, id: 10

Here is a full example:

get "/events", xhr: true, params: { direction: "past" }




相关问题
ajax login using httpRequest?

I am trying to develop my login script to give feedback to the user if the login is valid or not. Basically if it isn t correct a div box will show saying its wrong, if its correct it will show its ...

Virtual Tour using sketch up, ajax, flash technologies

I want to know if there are existing technology that make your 3d models in sketch into virtual tours, using either Ajax or Flash for web presentation. If there s none, which will be a good approach ...

How can i update div continuously

I have asp.net application where i have a div which showing the value from other site. The value of that site is changing continuously. I want that my div will automatically update in some interval ...

热门标签