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.