Как установить запросы args с помощью Flask test_client?

Мне нужно проверить определенное представление, которое получает определенную информацию из request.args.

Я не могу издеваться над этим, потому что много вещей в представлении использует объект запроса. Единственная альтернатива, о которой я могу думать, это вручную установить request.args.

Я могу сделать это с помощью test_request_context(), например:

with self.app.test_request_context() as req:
    req.request.args = {'code': 'mocked access token'}
    MyView()

Теперь запрос внутри этого представления будет иметь аргументы, которые я установил. Однако мне нужно вызвать мой взгляд, а не просто инициализировать его, поэтому я использую это:

with self.app.test_client() as c:
    resp = c.get('/myview')

Но я не знаю, как манипулировать аргументами запроса таким образом.

Я пробовал это:

with self.app.test_client() as c:
    with self.app.test_request_context() as req:
        req.request.args = {'code': 'mocked access token'}
        resp = c.get('/myview')

но это не устанавливает request.args.

Ответ 1

Передайте аргумент query_string в c.get, который может быть либо dict, MultiDict, либо уже закодированной строкой.

with app.test_client() as c:
    r = c.get('/', query_string={'name': 'davidism'})

тестовые методы клиентского запроса передают свои аргументы Werkzeug EnvironBuilder, где это задокументировано.