web2py:创建传递参数的doctests

时间:2012-05-03 13:31:29

标签: python web2py doctest url-parameters

希望这是一个简单的问题,但它似乎没有在文档或web2py书中介绍......

我有一个类似于:

的web2py控制器方法
def mymethod():
    '''
    doctests go here
    '''
    param1 = request.vars['param1']
    param2 = request.vars['param2']
    param3 = request.vars['param3']
    # Stuff happens...
    return dict(result=result)

根据文档

将参数作为请求变量传入

有没有办法构建doctest(内联方法定义)来评估调用的返回值,例如mymethod(param1=9, param2='a', param3=3.7)

提前致谢

2 个答案:

答案 0 :(得分:3)

只需在doctest中的request.vars中输入所需的值:

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

要获得doctest权限,您可以在web2py shell中玩游戏,您可以按照以下步骤开始:

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

这将在您的应用程序的模型文件执行的环境中为您提供Python shell(这是-M选项的作用)。因为指定了mycontroller,所以你也可以调用mycontroller中的任何函数。在shell中运行一些命令,然后将会话粘贴到docstring中。

答案 1 :(得分:0)

除了@Anthony提供的优秀示例之外,我还尝试在测试restful服务时使用urllib2.urlopen(...)。从doc的角度来看,代码并不是很干净,但它确实有用。

@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