add an xfail-ed test for a potential future "enabled" parameter to setup functions
This commit is contained in:
parent
fe4ccdff0e
commit
a1c3d60747
|
@ -19,8 +19,10 @@ class FactoryMarker:
|
||||||
return function
|
return function
|
||||||
|
|
||||||
class SetupMarker:
|
class SetupMarker:
|
||||||
def __init__(self, scope):
|
def __init__(self, scope, enabled):
|
||||||
self.scope = scope
|
self.scope = scope
|
||||||
|
self.enabled = enabled
|
||||||
|
|
||||||
def __call__(self, function):
|
def __call__(self, function):
|
||||||
function._pytestsetup = self
|
function._pytestsetup = self
|
||||||
return function
|
return function
|
||||||
|
@ -36,14 +38,17 @@ def factory(scope=None, params=None):
|
||||||
"""
|
"""
|
||||||
return FactoryMarker(scope, params)
|
return FactoryMarker(scope, params)
|
||||||
|
|
||||||
def setup(scope="function"):
|
def setup(scope="function", enabled=None):
|
||||||
""" return a decorator to mark functions as setup functions.
|
""" return a decorator to mark functions as setup functions.
|
||||||
|
|
||||||
:arg scope: the scope for which the setup function will be active, one
|
:arg scope: the scope for which the setup function will be active, one
|
||||||
of "function", "class", "module", "session".
|
of "function", "class", "module", "session".
|
||||||
Defaults to "function".
|
Defaults to "function".
|
||||||
|
:arg enabled: if a callable is specified, enabled(node) will be called
|
||||||
|
and if it returns a false value this setup function
|
||||||
|
will not be called and its funcargs will not be setup.
|
||||||
"""
|
"""
|
||||||
return SetupMarker(scope)
|
return SetupMarker(scope, enabled)
|
||||||
|
|
||||||
def cached_property(f):
|
def cached_property(f):
|
||||||
"""returns a cached property that is calculated by function f.
|
"""returns a cached property that is calculated by function f.
|
||||||
|
|
|
@ -1898,6 +1898,32 @@ class TestSetupDiscovery:
|
||||||
reprec = testdir.inline_run("-s")
|
reprec = testdir.inline_run("-s")
|
||||||
reprec.assertoutcome(passed=2)
|
reprec.assertoutcome(passed=2)
|
||||||
|
|
||||||
|
@pytest.mark.xfail(reason="'enabled' feature not implemented")
|
||||||
|
def test_setup_enabled_functionnode(self, testdir):
|
||||||
|
testdir.makepyfile("""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
def enabled(parentnode, markers):
|
||||||
|
return "needsdb" in markers
|
||||||
|
|
||||||
|
@pytest.factory(params=[1,2])
|
||||||
|
def db(request):
|
||||||
|
return request.param
|
||||||
|
|
||||||
|
@pytest.setup(enabled=enabled)
|
||||||
|
def createdb(db):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_func1(request):
|
||||||
|
assert "db" not in request.funcargnames
|
||||||
|
|
||||||
|
@pytest.mark.needsdb
|
||||||
|
def test_func2(request):
|
||||||
|
assert "db" in request.funcargnames
|
||||||
|
""")
|
||||||
|
reprec = testdir.inline_run("-s")
|
||||||
|
reprec.assertoutcome(passed=2)
|
||||||
|
|
||||||
def test_callables_nocode(self, testdir):
|
def test_callables_nocode(self, testdir):
|
||||||
"""
|
"""
|
||||||
a imported mock.call would break setup/factory discovery
|
a imported mock.call would break setup/factory discovery
|
||||||
|
|
Loading…
Reference in New Issue