#144·icecream

2.1.3: pytest is failing in two nits

Author: kloczekCreated Mar 7, 2023Updated Jan 19, 2026

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

  • python3 -sBm build -w --no-isolation
  • because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
  • install .whl file in </install/prefix>
  • run pytest with $PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>
  • build is performed in env which is cut off from access to the public network (pytest is executed with -m "not network")

Here is pytest output:

bash
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-icecream-2.1.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-icecream-2.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra -m 'not network'
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.8.16, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/tkloczko/rpmbuild/BUILD/icecream-2.1.3
collected 37 items

tests/test_icecream.py ..........F.....................F..                                                                                                                            [ 94%]
tests/test_install.py ..                                                                                                                                                              [100%]

========================================================================================= FAILURES ==========================================================================================
______________________________________________________________________________ TestIceCream.testEnableDisable _______________________________________________________________________________

self = <test_icecream.TestIceCream testMethod=testEnableDisable>

    def testEnableDisable(self):
        with disableColoring(), captureStandardStreams() as (out, err):
            assert ic(a) == 1
            assert ic.enabled

            ic.disable()
            assert not ic.enabled
            assert ic(b) == 2

            ic.enable()
            assert ic.enabled
            assert ic(c) == 3

        pairs = parseOutputIntoPairs(out, err, 2)
>       assert pairs == [[('a', '1')], [('c', '3')]]
E       AssertionError: assert [[('REPL (e.g...ion?', None)]] == [[('a', '1')], [('c', '3')]]
E         At index 0 diff: [('REPL (e.g. from the command line), a frozen application (e.g. packaged with PyInstaller), or did the underlying source code change during execution?', None)] != [('a', '1')]
E         Use -v to get more diff

tests/test_icecream.py:380: AssertionError
______________________________________________________________________ TestIceCream.testSingledispatchArgumentToString ______________________________________________________________________

self = <test_icecream.TestIceCream testMethod=testSingledispatchArgumentToString>

    def testSingledispatchArgumentToString(self):
        def argumentToString_tuple(obj):
            return "Dispatching tuple!"

        # Unsupport Python2
        if "singledispatch" not in dir(functools):
            for attr in ("register", "unregister"):
                with self.assertRaises(NotImplementedError):
                    getattr(argumentToString, attr)(
                        tuple, argumentToString_tuple
                    )
            return

        # Prepare input and output
        x = (1, 2)
        default_output = ic.format(x)

        # Register
        argumentToString.register(tuple, argumentToString_tuple)
        assert tuple in argumentToString.registry
>       assert str.endswith(ic.format(x), argumentToString_tuple(x))

tests/test_icecream.py:413:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/python-icecream-2.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages/icecream/icecream.py:225: in format
    out = self._format(callFrame, *args)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <icecream.icecream.IceCreamDebugger object at 0x7f8c3420bc70>
callFrame = <frame at 0x558ed9986de0, file '/home/tkloczko/rpmbuild/BUILD/icecream-2.1.3/tests/test_icecream.py', line 413, code testSingledispatchArgumentToString>, args = ((1, 2),)
prefix = 'ic| ', callNode = None

    def _format(self, callFrame, *args):
        prefix = callOrValue(self.prefix)

        callNode = Source.executing(callFrame).node
        if callNode is None:
>           raise NoSourceAvailableError()
E           icecream.icecream.NoSourceAvailableError

../../BUILDROOT/python-icecream-2.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages/icecream/icecream.py:233: NoSourceAvailableError
===================================================================================== warnings summary ======================================================================================
tests/test_icecream.py::TestIceCream::testMultilineContainerArgs
  /home/tkloczko/rpmbuild/BUILD/icecream-2.1.3/tests/test_icecream.py:573: DeprecationWarning: Please use assertRegex instead.
    self.assertRegexpMatches(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================================================================== short test summary info ==================================================================================
FAILED tests/test_icecream.py::TestIceCream::testEnableDisable - AssertionError: assert [[('REPL (e.g...ion?', None)]] == [[('a', '1')], [('c', '3')]]
FAILED tests/test_icecream.py::TestIceCream::testSingledispatchArgumentToString - icecream.icecream.NoSourceAvailableError
========================================================================== 2 failed, 35 passed, 1 warning in 1.35s ==========================================================================

Here is list of installed modules in build env

bash
Package         Version
--------------- --------------
asttokens       2.2.1
attrs           22.2.0
build           0.10.0
colorama        0.4.6
distro          1.8.0
exceptiongroup  1.0.0
executing       1.2.0
gpg             1.18.0-unknown
iniconfig       2.0.0
libcomps        0.1.19
packaging       23.0
pip             22.3.1
pluggy          1.0.0
Pygments        2.14.0
pyproject_hooks 1.0.0
pytest          7.2.2
python-dateutil 2.8.2
rpm             4.17.0
setuptools      65.6.3
six             1.16.0
tomli           2.0.1
wheel           0.38.4