2010-02-10 7 views
5

Esto es lo que tengo:¿Cómo puedo simular/falsificar la existencia de un archivo usando rspec?

it "should be able to get a valid directory path" do 
    @asset.some_file_path.should == "/something/test.jpg" 
end 

El problema es que "/not_here_yet.jpg" vuelve some_file_path si no hay un archivo existente.

def some_file_path 
    if File.exists(self.my_image_path) 
    return my_image_path 
    else 
    return "/not_here_yet.jpg 
    end 
end 

Realmente no quiero crear un nuevo archivo en mis pruebas. ¿Hay alguna manera de falsificar la existencia del archivo?

estoy pensando algo en la línea de:

it "should be able to get a valid directory path" do 
    AwesomeFakeFileCreator.create(@asset.my_image_path) 
    @asset.some_file_path.should == "/something/test.jpg" 
end 

Es esto posible? ¿Cómo puedo hacer tal cosa?

Edit: se parecía un poco a FakeFS pero no estoy seguro de que responde a mi pregunta

Respuesta

6

se podría hacer algo en las líneas de

it "should be able to get a valid directory path" do 
    File.stub!(:exists?).and_return(true) 
    @asset.stub!(:my_image_path).and_return("/something/test.jpg") 
    @asset.some_file_path.should == "/something/test.jpg" 
end 
+0

¿Podría detallar un poco lo que está haciendo? – marcgg

+1

La primera línea anota que el archivo existe devuelve verdadero y la segunda línea anula el método my_image_path en el objeto activo y devuelve la ruta del archivo, cuyo método some_file_path devolverá en ese caso, es decir, de lo que trata todo el ejemplo de la especificación. En resumen, devuelva la ruta si existe. – nas

+0

No es que tengas que mantenerme feliz ni nada, no hice la pregunta, pero me temo que no lo entendí. – Shadowfirebird

-2

Esta es probablemente una respuesta muy poco útil como yo solo estoy entendiendo las pruebas automatizadas, yo mismo, pero:

Según tengo entendido, solo necesita probar dos condiciones: ¿existe el archivo y el archivo no existe?

Probando la inexistencia es bastante fácil: crear un activo con un my_image_path que no existe, y comprobar que la función devuelve '/not_here_yet.jpg'.

¿Seguro que puede probar la otra carcasa de la misma manera? crea un archivo vacío con una extensión .jpg, luego un activo que lo apunta y verifica que la función devuelve el nombre correcto?

+0

No quiero crear archivos sobre la marcha. Las pruebas serían más lentas y tendría que ser muy cuidadoso al crear/eliminar el archivo. – marcgg

+0

:) Dije que probablemente sería una respuesta inútil ... – Shadowfirebird

0

Tal vez pueda falsificar con la ruta correcta de su Archivo. Falso para cada archivo que desea devolver la ruta

it "should be able to get a valid directory path" do 
    File.stub!(:exists?).with("my_image_path.jpg").and_return("my_image_path.jpg") 
    @asset.some_file_path.should == "my_image_path.jpg" 
    end 
Cuestiones relacionadas