Щелкните python cli.testing typeerror

У меня 2 файла:

click_example.py

import click

@click.group(invoke_without_command=True)
@click.option('--apikey', default='My key',
              help="API key to use.")
@click.pass_context
def main(ctx, apikey):
    """
    A CLI for live and past football scores from various football leagues.
    resources are given as commands and subresources and their filters as options
    """
    headers = {'X-Auth-Token': apikey}
    ctx.obj['headers'] = headers

@main.command()
@click.option('--limit', '-l', help='limit number of records')
def scorers(limit):
    click.echo('limit is : %s' % limit)
    
if __name__ == '__main__':
    main(obj={})

и тестовый файл:

test_cs.py

from click.testing import CliRunner
import unittest
from .clicksample import main

class Sample(unittest.TestCase):

    def setUp(self):
        self.runner = CliRunner()

    def tearDown(self):
        pass
    
    def test_sample_command(self):
        result = self.runner.invoke(main)
        self.assertEqual(0, result.exit_code)

if __name__ == '__main__':
        unittest.main()

Я хочу знать, почему тест не проходит. Когда я запускаю скрипт clicksample из командной строки, он работает должным образом, но по какой-то причине не завершается, как ожидалось в тесте. Когда тыкаю результат с помощью pdb, я получаю следующую статистику:

(Pdb) result 
<Result TypeError("'NoneType' object does not support item assignment",)>
(Pdb) result.exit_code
-1
(Pdb)
1
0
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы никогда не устанавливаете ctx.obj. Это может исправить это для вас:

def main(ctx, apikey):
    if ctx.obj is None:
        ctx.obj = {}
    ...

Другие вопросы по теме