tests test scenario rails feature examples ruby-on-rails rspec xmlhttprequest

ruby on rails - test - ¿Cómo puedo probar la solicitud POST ajax con RSpec?



rspec test rails api (3)

Sólo quiero probar la solicitud de ajax en las especificaciones del controlador. El código del producto está abajo. Estoy usando Devise para la autenticación.

class NotesController < ApplicationController def create if request.xhr? @note = Note.new(params[:note]) if @note.save render json: { notice: "success" } end end end end

Y la especificación está abajo.

describe NotesController do before do user = FactoryGirl.create(:user) user.confirm! sign_in user end it "has a 200 status code" do xhr :post, :create, note: { title: "foo", body: "bar" }, format: :json response.code.should == "200" end end

Espero que el código de respuesta sea 200, pero devuelve 401. Supongo que debe ser debido a que la solicitud que arroja rspec carece de autenticidad_tipo o algo así. ¿Cómo puedo aplastarlo?

Cualquier ayuda sería muy apreciada.


Cambié el formato:: json al hash params y funciona bien, respondiendo con json.

describe NotesController do before do user = FactoryGirl.create(:user) user.confirm! sign_in user end it "has a 200 status code" do xhr :post, :create, { note: { title: "foo", body: "bar" }, format: :json } response.code.should == "200" end end


Probablemente haya cumplido el error CSRF, intente deshabilitar la validación CSRF para llamadas ajax, algo así como

# In your application_controller.rb def verified_request? if request.xhr? true else super() end end


Respondiendo a mi propia pregunta. Encontré que el format: :json estaba equivocado. Solo bórralo y funciona. Al igual que a continuación:

it "has a 200 status code" do xhr :post, :create, note: { title: "foo", body: "bar" } response.code.should == "200" end

Lo siento por todo el alboroto.