pytest fixture of fixture, not found

Based on this stackoverflow: pytest fixture of fixtures

I have the following code in the same file:

@pytest.fixture
def form_data(): return { ... }
@pytest.fixture
def example_event(form_data): return {... 'data': form_data, ... }

But when I run pytest, it complains that fixture 'form_data' not found

I am new to pytest so I am not even sure if this is possible?

2

1 Answer

Yes, it is possible.

If you have the test and all the fixtures in 1 file:test.py

import pytest
@pytest.fixture
def foo(): return "foo"
@pytest.fixture
def bar(foo): return foo, "bar"
def test_foo_bar(bar): expected = ("foo", "bar") assert bar == expected

and run pytest test.py then Success!!!

======================================= test session starts ========================================
platform darwin -- Python 3.6.8, pytest-4.3.0
collected 1 item
test.py . [100%]
===================================== 1 passed in 0.02 seconds =====================================

But if you put the fixtures in a different file: test_foo_bar.py

from test import bar
def test_foo_bar(bar): expected = ("foo", "bar") assert bar == expected

and run pytest test_foo_bar.py expecting (like I did) that importing only the bar fixture is enough since on importing it would already have executed the foo fixture then you get the error you are getting.

======================================= test session starts ========================================
platform darwin -- Python 3.6.8, pytest-4.3.0
collected 1 item
test2.py E [100%]
============================================== ERRORS ==============================================
__________________________________ ERROR at setup of test_foo_bar __________________________________
file .../test_foo_bar.py, line 3 def test_foo_bar(bar):
.../test.py, line 7 @pytest.fixture def bar(foo):
E fixture 'foo' not found
> available fixtures: TIMEOUT, bar, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, cov, doctest_namespace, monkeypatch, no_cover, once_without_docker, pytestconfig, record_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
> use 'pytest --fixtures [testpath]' for help on them.
.../test.py:7
===================================== 1 error in 0.03 seconds ======================================

To fix this also import the foo fixture in the test_foo_bar.py module.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like