[pyar] [django] factory_boy y queryset

Daniel dmlistapython en gmail.com
Lun Mayo 5 11:41:20 ART 2014


El 5 de mayo de 2014, 11:27, Martín Gaitán <gaitan en gmail.com> escribió:

> 2014-05-05 10:17 GMT-03:00 Daniel <dmlistapython en gmail.com>:
>
>>
>> Factory boy sirve para generar datos sin utilizar fixtures, sino
>>> factories.
>>>
>>> ¿Por qué querrías que Factory Boy te generase una queryset?
>>>
>>
>> para testear los filters y Q que quiero hacer
>>
>
>
> Daniel, lo que te explica Juan Manuel (entiendo) es que factory_boy crea
> instancias reales de tu modelo, no objetos parecidos (mocks). La ventaja es
> que es mucho más fácil porque podés hacer que los objetos relacionados (por
> ejemplo los ForeignKey) se creen solos, entre muchas otras cosas piolas.
>
> Pero siendo instancias de modelos reales, si usas la estrategia BUILD que
> es la default [1], las instancias creadas artificialmente quedan en tu base
> de datos y entonces podés hacer las consultas que quieras.
>
> Entonces
>
> 1. En tu test, tu modelo no tiene instancias
> 2. Creas algunas instancias particulares con factory_boy
> 3. Realizas consultas a tu modelo comprobando que dependiendo de uno u
> otro atributo de las instancias que creates pasan o no los filtros de tu
> consulta.
>
> Te puedo mostrar estos ejemplos:
>
> https://github.com/mgaitan/preciosa/blob/develop/preciosa/precios/tests/test_productos.py
>
> Por otro lado, si de verdad querés un "mock" de queryset de django, podés
> mirar esto [2] del tipito que hizo sentry y disqus, entre otras cosas.
>
>
a ver si aporta, el factory para el test es este

def listaArticulosParaBusquedas():
    lista = []
    marcaM = FactoryMarca()
    rubroM = FactoryRubro()
    for c in range(5):
        lista.append(FactoryArticulo(marca=marcaM))
    for c in range(5):
        lista.append(FactoryArticulo(marca=marcaM, rubro=rubroM))
    for c in range(5):
        lista.append(FactoryArticulo(rubro=rubroM))
    for c in range(5):
        lista.append(FactoryArticulo())
    for c in range(5):
        lista.append(FactoryArticulo(medida="1234"))
    for c in range(5):
        lista.append(FactoryArticulo(rubro=rubroM, medida="1234"))

    return lista

no tengo problemas con el factory, el tema es hacer el test de las queries
por elemplo que me devuelva todos
los de determinado rubro que tengan la medida=1234 por ejemplo.

Aclaro que estoy incursionando en tdd, y aparte nunca usé modelmanager que
me sugirió Juan Manuel, estoy investigango el tema

-- 
Daniel Malisani
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140505/aa96756a/attachment.html>


More information about the pyar mailing list