diff options
author | holger krekel <holger@merlinux.eu> | 2013-11-13 07:43:59 +0100 |
---|---|---|
committer | holger krekel <holger@merlinux.eu> | 2013-11-13 07:43:59 +0100 |
commit | ce0af892aa8a41c11a40345846411ce429d1ae77 (patch) | |
tree | 23f815645a469005966a791494506daecd1867ae | |
parent | 3f389238f89c0074fa2534ec2f518574aa174003 (diff) | |
parent | 846cf781a13ba3a98c7e3c64c18f5d0386846884 (diff) | |
download | pytest-ce0af892aa8a41c11a40345846411ce429d1ae77.tar.gz |
Merged in paylogic/pytest/multi-level-fixture-deps-override (pull request #83)
When overridden, fixture's dependencies are called from all levels of folder structure
-rw-r--r-- | _pytest/python.py | 3 | ||||
-rw-r--r-- | testing/test_conftest.py | 37 |
2 files changed, 38 insertions, 2 deletions
diff --git a/_pytest/python.py b/_pytest/python.py index 4c742c668..085e445be 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -1556,8 +1556,7 @@ class FixtureManager: fixturedefs = self.getfixturedefs(argname, parentid) arg2fixturedefs[argname] = fixturedefs if fixturedefs is not None: - for fixturedef in fixturedefs: - merge(fixturedef.argnames) + merge(fixturedefs[-1].argnames) return fixturenames_closure, arg2fixturedefs def pytest_generate_tests(self, metafunc): diff --git a/testing/test_conftest.py b/testing/test_conftest.py index 6f2dc2619..c2d5ff1c6 100644 --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -215,3 +215,40 @@ def test_conftest_import_order(testdir, monkeypatch): conftest = Conftest() monkeypatch.setattr(conftest, 'importconftest', impct) assert conftest.getconftestmodules(sub) == [ct1, ct2] + + +def test_fixture_dependency(testdir, monkeypatch): + ct1 = testdir.makeconftest("") + ct1 = testdir.makepyfile("__init__.py") + ct1.write("") + sub = testdir.mkdir("sub") + sub.join("__init__.py").write("") + sub.join("conftest.py").write(py.std.textwrap.dedent(""" + import pytest + + @pytest.fixture + def not_needed(): + assert False, "Should not be called!" + + @pytest.fixture + def foo(): + assert False, "Should not be called!" + + @pytest.fixture + def bar(foo): + return 'bar' + """)) + subsub = sub.mkdir("subsub") + subsub.join("__init__.py").write("") + subsub.join("test_bar.py").write(py.std.textwrap.dedent(""" + import pytest + + @pytest.fixture + def bar(): + return 'sub bar' + + def test_event_fixture(bar): + assert bar == 'sub bar' + """)) + result = testdir.runpytest("sub") + result.stdout.fnmatch_lines(["*1 passed*"]) |