2011-03-15 12 views
8

Básicamente me gustaría crear una matriz y luego anexarla durante mis especificaciones antes de procesarla y mostrarla finalmente al usuario. Puedo proponer algunas soluciones pero, idealmente, me gustaría hacer lo siguiente.RSpec 2 antes (: suite) ámbito variable

RSpec.configure do |config| 
    config.before(:suite) { @array_of_stuff ||= [] } 
    config.after(:suite) { process_and_print(@array_of_stuff) } 
end 

def process_and_print(array) 
    # do stuff 
end 

desgracia, pero no es sorprendente @array_of_stuff no es en su alcance y no se pueden adjuntar a partir de las especificaciones de mi, a diferencia de si la instalación en un antes (: todos) bloque.

¿Hay algo que proporcione RSpec que haga algo como esto muy sencillo?

Respuesta

9

que era probable que no quiere dar a este, pero se puede utilizar custom settings:

spec_helper:

RSpec.configure do |config| 
    config.add_setting :my_array 
    config.before(:suite) { RSpec.configuration.my_array = [] } 
end 

ejemplo de especificaciones:

it "should do something" do 
    RSpec.configuration.my_array << "some value" 
    RSpec.configuration.my_array.length.should eql(1) 
end 
+0

Muy apreciado. – lebreeze

+7

'add_setting' definitivamente no es para eso! ¿Por qué no usar una variable global? Creo que sería más claro en cuanto a qué es y más fácil de detectar al escanear el código. –

+0

Definitivamente un poco hacky, pero funciona a la perfección. ¿Alguna otra forma de hacer esto? El uso de resultados globales en el mensaje: advertencia: acceso variable de clase desde el nivel superior – justingordon

Cuestiones relacionadas