If you look closely into PyCharm sources, from the whole pytest
output, PyCharm uses a single line the to parse the data for displaying in the Click to see difference
dialog. This is the AssertionError: <message>
line:
def test_spam():
> assert v1 == v2
E AssertionError: assert {'foo': 'bar'} == {'foo': 'baz'}
E Differing items:
E {'foo': 'bar'} != {'foo': 'baz'}
E Use -v to get the full diff
If you want to see the full diff line without truncation, you need to customize this line in the output. For a single test, this can be done by adding a custom message to the assert
statement:
def test_eggs():
assert a == b, '{0} != {1}'.format(a, b)
If you want to apply this behaviour to all tests, define custom pytest_assertrepr_compare
hook. In the conftest.py
file:
# conftest.py
def pytest_assertrepr_compare(config, op, left, right):
if op in ('==', '!='):
return ['{0} {1} {2}'.format(left, op, right)]
The equality comparison of the values will now still be stripped when too long; to show the complete line, you still need to increase the verbosity with -vv
flag.
Now the equality comparison of the values in the AssertionError
line will not be stripped and the full diff is displayed in the Click to see difference
dialog, highlighting the diff parts: