Estoy tratando de crear un proceso de inicio de sesión de rieles con un dispositivo que permita al usuario iniciar sesión/cerrar sesión a través de una aplicación móvil.Cómo probar el inicio de sesión de json en ingenio con rspec
he creado un SessionsController así:
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_to do |format|
format.html { super }
format.json {
render :status => 200, :json => { :error => "Success", :user => resource}.to_json
}
end
end
def destroy
super
end
end
Mis rutas:
devise_for :users, :controllers => {:sessions => "sessions"}
resources :users
Entonces tengo la siguiente especificación para probar el proceso:
require 'spec_helper'
describe SessionsController do
describe "POST 'signin'" do
before (:each) do
@user = Factory(:user)
end
it "should login with json request" do
@expected = @user.to_json
post :create, :user => {:email => '[email protected]', :password => 'please'}, :content_type => 'application/json', :format => :json
response.body.should == @expected
end
end
end
Y tengo la siguiente error:
Failure/Error: post :create, :user => {:email => '[email protected]', :password => 'please'}, :content_type => 'application/json', :format => :json
AbstractController::ActionNotFound:
Could not find devise mapping for path "https://stackoverflow.com/users/sign_in.json?content_type=application%2Fjson&user%5Bemail%5D=user%40test.com&user%5Bpassword%5D=please".
Maybe you forgot to wrap your route inside the scope block?
[EDITAR] Parece que la funcionalidad está bien, pero solo la prueba está rota; porque si me quedo este pequeño script:
require 'rest_client'
require "active_support/core_ext"
RestClient.post "http://localhost:3000/users/sign_in", {:user => {:email => '[email protected]', :password => 'please'}}.to_json, :content_type => :json, :accept => :json
me sale el siguiente resultado:
"{\"error\":\"Success\",\"user\":{\"email\":\"[email protected]\",\"name\":\"First User\"}}"
que es el esperado.
parece que localhost: 3000 necesita ser encendido para la prueba? – Karan
Sí: utilizo la protección para vigilar las modificaciones y ejecutar las pruebas durante el desarrollo, por lo que localhost: 3000 siempre está encendido. – obo