Django channels group_send не передает сообщения о событиях в тестовой среде

У меня есть потребитель Django Channels receive функция, подобная следующей:

async def receive(self, text_data=None, bytes_data=None):
   ## Some other code before

   await self.channel_layer.group_send(
      self.room_name,
      {
         'type': 'answered_users_count',
         'increment_answer_id': 15,
      },
   )

Функция answered_users_count выглядит следующим образом:

async def answered_users_count(self, event):
    print(event)
    increment_answer_id = event['increment_answer_id']

    await self.send(
        text_data=json.dumps({
            'meant_for': 'all',
            'type': 'answer_count',
            'data': {
                'increment_answer_id': increment_answer_id
            }
        })
    )

Все это прекрасно работает с python manage.py runserver, где print(event) также печатает следующий словарь в командную строку:

{'type': 'answered_users_count', 'increment_answer_id': 15}

Однако эта часть потребителя не работает, когда дело доходит до запуска модульного теста, который я написал для него. Вот юнит-тест, который я написал для проверки вышеприведенного кода:

class SampleConsumerTest(TransactionTestCase):

   async def test_channel(self):

      communicator = WebsocketCommunicator(application, "/ws/walk/qa_control/12/")
      connected, subprotocol = await communicator.connect()
      self.assertEqual(connected, True)

      await communicator.send_to(json.dumps({
            "abc": "xyz"
      }))

      raw_message = await communicator.receive_from()
      message = json.loads(raw_message)

Когда я запускаю вышеприведенный тестовый пример с помощью python manage.py test, он не работает. Я понял, что причина этого в том, что event, переданный в качестве входа в answered_users_count, не несет в себе поле increment_answer_id при выполнении теста. Я узнал об этом потому, что строка print(event) в функции answered_users_count в данном случае записала в командную строку такое значение:

{'type': 'answered_users_count'}

Это означает, что в событии, которое было передано в answered_users_count, отсутствует поле increment_answer_id.

Однако, эта часть прекрасно работает на python3 manage.py runserver. Вот полная ошибка, которую я получаю в случае неудачи тестового примера:

Для слоя канала я использую InMemoryChannelLayer. Вот настройки для него:

CHANNEL_LAYERS = {
        'default': {
            'BACKEND': 'channels.layers.InMemoryChannelLayer'
        }
    }

Помогите, пожалуйста!

Вернуться на верх