Estoy intentando mantener mis especificaciones SECAS creando un grupo de ejemplo compartido que realice las verificaciones estándar para todos los controladores de administración (todos los controladores bajo el espacio de nombre Admin
de mi proyecto). Estoy luchando por encontrar la manera de hacerlo, ya que el ejemplo compartido necesita proporcionar información sobre qué acciones y parámetros usar. Idealmente, debería presentar errores significativos si falla una prueba (es decir, incluye los detalles de la acción que estaba probando).Generación dinámica de ejemplos compartidos en RSpec 2?
require 'spec_helper'
shared_examples "an admin controller" do
before(:each) do
@non_admin = User.make
@admin = User.make(:admin)
end
context "as an admin user" do
@actions.each do |action, params|
specify "I should be able to access ##{action.last} via #{action.first}" do
self.active_user = @admin
send(action.first, action.last, params)
response.status.should be_ok
end
end
end
context "as a regular user" do
@actions.each do |action, params|
specify "I should be denied access to ##{action.last}" do
self.active_user = @non_admin
send(action.first, action.last, params)
response.status.should be 403
end
end
end
end
describe Admin::UserNotesController do
@user = User.make
@actions = { [:get, :index] => { :user_id => @user.id },
[:get, :new] => { :user_id => @user.id },
[:post, :create] => { :user_id => @user.id } }
it_behaves_like "an admin controller"
end
Este errores por la razón obvia de que @actions
no es visible para el grupo de ejemplo compartida. Si uso let
, esto solo está disponible en el contexto de un ejemplo, no en el contexto del bloque describe
. ¿Algunas ideas?
Este es brillante, gracias! No hay nada como borrar el código :) – d11wtq