re #320 fallback to test scope if the class-scoped fixture is used in non-class-based test function
--HG-- branch : 320-class-scoped-fixture-caching-is-broken-if
This commit is contained in:
parent
c36186ce65
commit
589138ea71
|
@ -1317,7 +1317,8 @@ class FixtureRequest(FuncargnamesCompatAttr):
|
|||
x = self._pyfuncitem.getparent(pytest.Class)
|
||||
if x is not None:
|
||||
return x
|
||||
scope = "module"
|
||||
# fallback to function
|
||||
return self._pyfuncitem
|
||||
if scope == "module":
|
||||
return self._pyfuncitem.getparent(pytest.Module)
|
||||
raise ValueError("unknown finalization scope %r" %(scope,))
|
||||
|
|
|
@ -513,12 +513,12 @@ class TestRequestCachedSetup:
|
|||
|
||||
def test_request_cachedsetup_class(self, testdir):
|
||||
reprec = testdir.inline_runsource("""
|
||||
mysetup = ["hello", "hello2"].pop
|
||||
mysetup = ["hello", "hello2", "hello3"].pop
|
||||
|
||||
def pytest_funcarg__something(request):
|
||||
return request.cached_setup(mysetup, scope="class")
|
||||
def test_func1(something):
|
||||
assert something == "hello2"
|
||||
assert something == "hello3"
|
||||
def test_func2(something):
|
||||
assert something == "hello2"
|
||||
class TestClass:
|
||||
|
@ -1090,7 +1090,7 @@ class TestAutouseManagement:
|
|||
def arg():
|
||||
l.append(1)
|
||||
return 0
|
||||
@pytest.fixture(scope="class", autouse=True)
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def something(arg):
|
||||
l.append(2)
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
"""Tests for fixtures with different scoping."""
|
||||
|
||||
|
||||
def test_class_scope_with_normal_tests(testdir):
|
||||
testpath = testdir.makepyfile("""
|
||||
import pytest
|
||||
|
||||
class Box:
|
||||
value = 0
|
||||
|
||||
@pytest.fixture(scope='class')
|
||||
def a(request):
|
||||
Box.value += 1
|
||||
return Box.value
|
||||
|
||||
def test_a(a):
|
||||
assert a == 1
|
||||
|
||||
class Test1:
|
||||
def test_b(self, a):
|
||||
assert a == 2
|
||||
|
||||
class Test2:
|
||||
def test_c(self, a):
|
||||
assert a == 3""")
|
||||
reprec = testdir.inline_run(testpath)
|
||||
for test in ['test_a', 'test_b', 'test_c']:
|
||||
assert reprec.matchreport(test).passed
|
Loading…
Reference in New Issue