Skip to content

Parameter "loop_factory" should be declared explicitly via indirect or in function itself #6909

@dcramer

Description

@dcramer

As of pytest 5.4.0 there is an issue with async tests, at the very least when using aiohttp. Can confirm that downgrading pytest fixed the issue.

Here's the same details I submitted over there when I thought aiohttp was the culprit:

Parameter "loop_factory" should be declared explicitly via indirect or in function itself

The commonality it turns out were async functions, and it appears to be caused somewhere within aiohttp. I'm not that familiar with asyncio or aiohttp, so I'm happy to debug more with guidance, but I'm hoping someone might have more thoughts here.

Related packages:

aiohttp==3.6.2 pytest==5.4.0 pytest-aiohttp==0.3.0 pytest-cov==2.8.1 pytest-forked==1.1.3 pytest-mock==2.0.0 pytest-responses==0.4.0 pytest-xdist==1.31.0 

Some detail around the callstack:

➜ ~/D/zeus (feat/increase-lru-cache) ✗ py.test -x --pdb =========================================================================================== test session starts ============================================================================================ platform darwin -- Python 3.8.1, pytest-5.4.0, py-1.8.1, pluggy-0.13.1 rootdir: /Users/dcramer/Development/zeus, inifile: setup.cfg plugins: mock-2.0.0, celery-4.1.1, xdist-1.31.0, aiohttp-0.3.0, forked-1.1.3, responses-0.4.0, cov-2.8.1 collecting 186 items >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> traceback >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> In function "test_health_check": Parameter "loop_factory" should be declared explicitly via indirect or in function itself >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering PDB >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB post_mortem (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(1144)_validate_explicit_parameters() -> fail(msg, pytrace=False) (Pdb) l 1139 func_name = self.function.__name__ 1140 msg = ( 1141 'In function "{func_name}":\n' 1142 'Parameter "{arg}" should be declared explicitly via indirect or in function itself' 1143 ).format(func_name=func_name, arg=arg) 1144 -> fail(msg, pytrace=False) 1145 1146 1147	def _find_parametrized_scope(argnames, arg2fixturedefs, indirect): 1148 """Find the most appropriate scope for a parametrized call based on its arguments. 1149 (Pdb) u > /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(939)parametrize() -> self._validate_explicit_parameters(argnames, indirect) (Pdb) l 934 935 self._validate_if_using_arg_names(argnames, indirect) 936 937 arg_values_types = self._resolve_arg_value_types(argnames, indirect) 938 939 -> self._validate_explicit_parameters(argnames, indirect) 940 941 # Use any already (possibly) generated ids with parametrize Marks. 942 if _param_mark and _param_mark._param_ids_from: 943 generated_ids = _param_mark._param_ids_from._param_ids_generated 944 if generated_ids is not None: (Pdb) u > /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/aiohttp/pytest_plugin.py(203)pytest_generate_tests() -> metafunc.parametrize("loop_factory", (Pdb) l 198 "Unknown loop '%s', available loops: %s" % ( 199 name, list(factories.keys()))) 200 else: 201 continue 202 factories[name] = avail_factories[name] 203 -> metafunc.parametrize("loop_factory", 204 list(factories.values()), 205 ids=list(factories.keys())) 206 207 208	@pytest.fixture 

aio-libs/aiohttp#4626

Metadata

Metadata

Assignees

No one assigned

    Labels

    topic: fixturesanything involving fixtures directly or indirectlytype: bugproblem that needs to be addressedtype: regressionindicates a problem that was introduced in a release which was working previously

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions