希望这是一个简单的问题,但它似乎没有在文档或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)
?
提前致谢
答案 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