Description
Description
On latest release and also on master branch, windows 10
The following test:
from numpy import linspace
from pytest import fixture
@fixture(params=linspace(1, 10, 10))
def value(request):
return request.param
def test_bug(value):
assert value == value
breaks with:
Traceback (most recent call last):
File "D:/WORK/pytest-nparray-params-bug/test_bug.py", line 4, in <module>
@fixture(params=linspace(1, 10, 10))
File "D:\WORK\pytest-nparray-params-bug\venv\lib\site-packages\_pytest\fixtures.py", line 1123, in fixture
name=name
File "D:\WORK\pytest-nparray-params-bug\venv\lib\site-packages\_pytest\fixtures.py", line 1032, in _parse_fixture_args
key: value for key, value in kwargs.items() if arguments.get(key) != value
File "D:\WORK\pytest-nparray-params-bug\venv\lib\site-packages\_pytest\fixtures.py", line 1032, in <dictcomp>
key: value for key, value in kwargs.items() if arguments.get(key) != value
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Cause
It seems that this line:
pytest/src/_pytest/fixtures.py
Lines 1031 to 1033 in b162ab6
Tries to get a boolean result from comparing None != <array>
which is ambiguous.
Possible solution
This might be solved by moving the cast to list (line 1137) at the very beginning (1116) of this function:
pytest/src/_pytest/fixtures.py
Lines 1116 to 1139 in b162ab6
I am actually running tests with this change but not 100% certain about side-effects, although it seems to be that casting to list that soon should not cause problems (equivalent of casting to list in user test code).
If you think this is okay I can create the PR.
- a detailed description of the bug or suggestion
- output of
pip list
from the virtual environment you are using - pytest and operating system versions
- minimal example if possible