web2py: creando doctests que pasan parámetros

Con suerte, una pregunta simple, pero no parece estar cubierta en la documentación o en el libro web2py ...

Tengo un método de controlador web2py que se parece a:

def mymethod():
    '''
    doctests go here
    '''
    param1 = request.vars['param1']
    param2 = request.vars['param2']
    param3 = request.vars['param3']
    # Stuff happens...
    return dict(result=result)

con los parámetros que se pasan como variables de solicitud según la documentación

¿Hay alguna forma de crear un doctest (en línea con la definición del método) para evaluar el valor de retorno de una llamada como mymethod(param1=9, param2='a', param3=3.7)?

Gracias por adelantado

preguntado el 03 de mayo de 12 a las 14:05

2 Respuestas

Simplemente coloque los valores deseados en request.vars dentro del doctest:

def mymethod():
    '''
    >>> request.vars.update(param1=9, param2='a', param3=3.7)
    >>> mymethod()
    [expected output of mymethod goes here]
    '''

Para obtener el doctest correcto, puede jugar en un shell web2py, que puede comenzar de la siguiente manera:

python web2py.py -S myapp/mycontroller -M -N

Eso le dará un shell de Python en un entorno con los archivos de modelo de su aplicación ejecutados (eso es lo que hace la opción -M). Debido a que se especifica mycontroller, también podrá llamar a cualquier función en mycontroller. Ejecute algunos comandos en el shell y luego pegue la sesión en su cadena de documentación.

contestado el 03 de mayo de 12 a las 15:05

¡Ajá! Así es como lo haces. Esperaba que fuera algo tan simple como eso. muchas gracias antonio- Monch1962

Además del excelente ejemplo proporcionado por @Anthony, también intenté usar urllib2.urlopen(...) al probar un servicio tranquilo. El código no es muy limpio desde la perspectiva del documento, pero funciona.

@request.restful()
def api():
    '''The following code demostrates how to interact with this api via python.

    >>> import urllib2, urllib, httplib, json
    >>> host = 'localhost:8000'
    >>> func = 'api'  # Otherwise request.function is NOT current function name during doctest
    >>> base = 'http://%s/%s/%s/%s' % (host, request.application, request.controller, func)


    Read all stuff.
    >>> json.load(urllib2.urlopen(base))
    {u'content': []}

    Create an entries.
    >>> p = {'name': 'Peter Pan', 'address': 'Neverland',}
    >>> r = json.load(urllib2.urlopen(base, urllib.urlencode(p)))
    >>> r['id'] > 0 and r['errors'] == {}  # typically as {'errors': {}, 'id': 1}
    True

    blah blah

    '''
    # the function body goes here

Respondido 17 Abr '13, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.