Как я могу добавить ключ / значение `url_route` в` scope` для тестов? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу протестировать моего потребителя, который использует scope['url_route'], но использует HttpCommunicator или ApplicationCommunicator, этот параметр не установлен.Как я могу установить этот параметр?Документация по тестированию очень ограничена и не имеет никакой документации по этому https://channels.readthedocs.io/en/latest/topics/testing.html.

test.py

from channels.testing import HttpCommunicator
import pytest

from my_app import consumers

@pytest.mark.asyncio
async def test_consumers():
    communicator = HttpCommunicator(consumers.MyConsumer, 'GET', '/project/1')
    response = await communicator.get_response()
    assert response['status'] == 400

my_app.py

import json

from channels.db import database_sync_to_async
from channels.generic.http import AsyncHttpConsumer

from projects import model

class MyConsumer(AsyncHttpConsumer):
    async def handle(self, body):
        _id = int(self.scope['url_route']['kwargs'].get('project_id', 1))
        record = await database_sync_to_async(models.Project.objects.get)(id=_id)
        data = json.dumps({"id": _id})
        await self.send_response(200, data.encode('utf8'))

1 Ответ

0 голосов
/ 15 февраля 2019

Нашел решение в документации, но оно было в разделе тестирования Websocket, а не в разделе HTTP.Либо импортируйте ваше asgi-приложение, либо оберните пользователя в URLRouter, затем используйте его в HttpCommunicator.Оказывается, есть некоторый поток, который добавляет scope['url_route'] в URLRouter.

...