Добавление id к маршруту url в Async-тестировании с помощью Django
Я создал простой чат и теперь хочу написать тест, чтобы проверить, подключается ли он. Следуя руководству в документации Channels, я придумал следующий тест:
class ViewTestCase(TestCase):
@classmethod
def setUp(self):
user_moderator = User.objects.create_superuser(first_name='tester',
username='test1',
password='123',
email='testuser@gmail.com')
user_player = User.objects.create_user(first_name='player',
username='player1',
password='1234',
email='testplayer@gmail.com')
pack1 = Pack.objects.create(deckStyle='Fibonacci',deck=['1','2','3'])
self.room = PokerRoom.objects.create(status='Pending',name='planning',styleCards='Fibonacci',
user=User.objects.get(username='test1'),
deck=Pack.objects.get(deckStyle='Fibonacci'),index=1)
user_player = ParticipatingUser.objects.create(name='player',idRoom=PokerRoom.objects.get(name='planning'), status='Pending')
self.story = Story.objects.create(storyName='testplanning',
idRoom=PokerRoom.objects.get(name='planning'),
status='Pending')
async def test_consumer(self):
application = URLRouter([
url(r'ws/chat/(?P<room_name>[A-Za-z0-9_-]+)/participant/(?P<user>\w+)/$', consumers.ChatConsumer.as_asgi()),
])
communicator = WebsocketCommunicator(application,"/ws/chat/room_id/participant/participant_id)/")
connected, subprotocol = await communicator.connect()
assert connected
await communicator.disconnect()
Моя проблема в том, что мне нужно подставить room_id и participant_id внутри моего WebsocketCommunicator. participant_id - это просто commom id, а room_id - это UUIDField. Я использовал следующий метод для извлечения этих идентификаторов в других моих тестах:
def test_something(self):
room_id = PokerRoom.objects.get(name='planning').id
user_id = User.objects.get(username='tester').id
...
Но если я использую тот же метод внутри async def вот так:
async def test_something(self):
room_id = PokerRoom.objects.get(name='planning').id
user_id = User.objects.get(username='tester').id
...
Я получаю эту ошибку django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Как я могу решить эту проблему?