2012-05-03 2 views
2

Будем надеяться, что простой вопрос, но это, кажется, не быть покрыты в документации или web2py книге ...web2py: создание doctests, которые проходят параметры

У меня есть метод контроллера 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) ?

Заранее спасибо

ответ

3

Просто поместите нужные значения в request.vars в doctest:

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

Чтобы получить doctest право, вы можете поиграть в web2py оболочки, которые вы можете начать следующим образом:

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

Это даст вам оболочку Python в среде с файлами модель вашего приложения выполняется (это то, что делает параметр -M). Поскольку mycontroller указан, вы также сможете вызвать любую функцию в mycontroller. Запустите некоторые команды в оболочке, а затем вставьте сеанс в свою docstring.

+0

Aha! Так вот как вы это делаете. Я надеялся, что это будет так просто. Большое спасибо Anthony – monch1962

0

Помимо превосходного примера, предоставленного @Anthony, я также попытался использовать urllib2.urlopen (...) при тестировании спокойного сервиса. Код не очень чист с точки зрения документа, но он работает.

@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 
Смежные вопросы