Сопоставитель pyhamcrest для списка не работает

В моем коде есть следующая тестовая функция:

      from hamcrest import assert_that, contains_inanyorder, has_entries

def test_associate_multiple_agents_to_skill(agent1, agent2, skill):
    with a.agent_skill(agent1, skill):
        response = confd.agents(agent2['id']).skills(skill['id']).put()
        response.assert_updated()

        response = confd.agents.skills(skill['id']).get()
        logger.critical(response)
        logger.critical(response.item)
        assert_that(
            response.item,
            has_entries(
                 agents=contains_inanyorder(
                     has_entries(id=agent1['id']), has_entries(id=agent2['id'])
                 )
            ),
        )

что дает мне следующую AssertionError:

      
AssertionError:
Expected: a dictionary containing {'agents': a sequence over [a dictionary containing {'id': <8>}, a dictionary containing {'id': <9>}] in any order}
     but: value for 'agents' not matched: <[{'id': 8, 'number': '6977', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49462/1.1/agents/8'}]}]>

и вывод logger.criticalчто я сделал в коде функции, чтобы проверить ответ:

      <Response 200
{'agents': [ [{'firstname': None,
              'id': 8,
              'lastname': None,
              'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/8',
                         'rel': 'agents'}],
              'number': '6481'}],
            [{'firstname': None,
              'id': 9,
              'lastname': None,
              'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/9',
                         'rel': 'agents'}],
              'number': '9741'}]],
 'category': None,
 'description': None,
 'id': 8,
 'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/skills/8',
            'rel': 'skills'}],
 'name': 'iKZJOZDEfc',
 'tenant_uuid': 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1'}
>

и вывод для response.item:

      {'id': 8, 'tenant_uuid': 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1', 'name': 'iKZJOZDEfc', 'category': None, 'description': None, 'links': [{'rel': 'skills', 'href': 'http://127.0.0.1:49404/1.1/agents/skills/8'}], 'agents': [ [ {'id': 8, 'number': '6481', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49404/1.1/agents/8'}]}], [{'id': 9, 'number': '9741', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49404/1.1/agents/9'}]}]]}

Я попытался изменить функцию на следующую, но все же; это не работает:

      def test_associate_multiple_agents_to_skill(agent1, agent2, skill):
    with a.agent_skill(agent1, skill):
        response = confd.agents(agent2['id']).skills(skill['id']).put()
        response.assert_updated()

        response = confd.agents.skills(skill['id']).get()
        logger.critical(response)
        logger.critical(response.item)
        assert_that(
            response.item,
            has_entries(
                agents=has_items(
                    contains_inanyorder(
                        has_entries(id=agent1['id']),
                    ),
                    contains_inanyorder(
                        has_entries(id=agent2['id']),
                    ),
                ),
            ),
        )

Любые предложения, чтобы заставить утверждение работать?

0 ответов

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