The Jest library for Node.js has a helpful expect.objectContaining function that makes it easy to assert only on the keys of interest in a particular test.

Python’s unittest library does have a similar assertDictEqual method, but it asserts on all keys.

I wanted to do be able to easily assert on only the keys of interest in Python tests, so I put together this quick test helper function to do so. It makes use of assertDictEqual, but only after extracting the keys of interest in a recursive way.

from typing import Dict
from unittest import TestCase

def assert_dict_matches(expected: Dict, actual: Dict):
"""
Assert that actual matches expected for the keys and indexes that are
present in expected, recursively.
"""
tc = TestCase()
tc.maxDiff = None
matched = match_keys(expected, actual)
tc.assertDictEqual(expected, matched)

def match_keys(expected, actual):
if isinstance(expected, dict):
assert isinstance(actual, dict)
return {
k: match_keys(expected[k], v)
for k, v in actual.items()
if k in expected.keys()
}
if isinstance(expected, list):
assert isinstance(actual, list)
return [
match_keys(expected[i], v) for i, v
in enumerate(actual[:len(expected)])
]
return actual