Tengo dificultades para obtener una prueba rspec para que pase un controlador. Me gustaría probar que el POST crear acción funciona. Estoy utilizando carriles (3.0.3), cancan (1.4.1), idear (1.1.5), rspec (2.3.0)No se puede probar con el controlador rspec POST crear acción (idear y cancan)
El modelo está muerto sencillo
class Account < ActiveRecord::Base
attr_accessible :name
end
El controlador es estándar así (directamente de andamios)
class AccountsController < ApplicationController
before_filter :authenticate_user!, :except => [:show, :index]
load_and_authorize_resource
...
def create
@account = Account.new(params[:account])
respond_to do |format|
if @account.save
format.html { redirect_to(@account, :notice => 'Account was successfully created.') }
format.xml { render :xml => @account, :status => :created, :location => @account }
else
format.html { render :action => "new" }
format.xml { render :xml => @account.errors, :status => :unprocessable_entity }
end
end
end
y la prueba rspec me gustaría transmitir es (con perdón del título, tal vez no sea el más apropiado)
it "should call create on account when POST create is called" do
@user = Factory.create(:user)
@user.admin = true
@user.save
sign_in @user #this is an admin
post :create, :account => {"name" => "Jimmy Johnes"}
response.should be_success
sign_out @user
end
Sin embargo, todo lo que consigo es
AccountsController get index should call create on account when POST create is called
Failure/Error: response.should be_success
expected success? to return true, got false
# ./spec/controllers/accounts_controller_spec.rb:46
Otras acciones pueden ser probados y no pasan (es decir, Tener nuevas)
aquí es la prueba para conseguir nuevos
it "should allow logged in admin to call new on account controller" do
@user = Factory.create(:user)
@user.admin=true
@user.save
sign_in @user #this is an admin
get :new
response.should be_success
sign_out @user
end
y para la terminación aquí es el archivo de la capacidad
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
¿Alguna idea? Supongo que estoy utilizando la expectativa rspec incorrecta, ya que el código funciona (¡simplemente es que la prueba no funciona como debiera!)
Zetetic tu respuesta fue excelente Tuve que hacer algunas tweeks para que pasara, pero la esencia era que debería haber sido una redirección. – Dimitris
Creo que esta respuesta debería ser la respuesta aceptada. –
He votado esto como la respuesta aceptada ya que la mayoría de las personas parecen encontrar esta respuesta la más útil – Dimitris