2010-11-23 29 views
13

Estoy tratando de probar si en un método de llamada cadena uno de los métodos obtiene un parámetro específico. En el código siguiente, por ejemplo, MyModel debe recibir el parámetro 0 para el método offset. Lamentablemente, el código siguiente no funciona. Parece que no es posible mezclar should_receive y stub_chain. ¿Cómo podría resolver esto? Estoy usando RSpec 2.stub_chain junto con should_receive

MyModel.should_receive(:offset).with(0).stub_chain(:tag_counts, :offset, :limit, :order).and_return([]) # does not work! 

El código que estoy tratando de prueba:

tags = taggable.tag_counts.offset(page-1).limit(per_page).where(*where_clause).order("count DESC") 

actualización

También he publicado la pregunta en el grupo de Google RSpec fueron David (el creador de RSpec) respondió (gracias David): http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0?hl=en

Respuesta

8

Esto es un ejemplo de lo que hago en una de mis especificaciones ahora. Es un poco torpe (causa de las muchas líneas), pero funciona:

SearchPaginationModel.stub(:tag_counts) { SearchPaginationModel } 
SearchPaginationModel.should_receive(:offset).with(0) { SearchPaginationModel } 
SearchPaginationModel.stub_chain(:limit, :where, :order) { [] } 
SearchPaginationModel.stub_chain(:tag_counts, :where, :count).and_return(1) 
SearchPaginationModel.search_tags(:page => "1") 

Esto, por ejemplo, en las pruebas de SearchPaginationModel.tag_counts.offset(0).limit(X).where(X).order(X) que realmente offset 0 se establece.

Cuestiones relacionadas