also improve missing funcarg error for setup functions
This commit is contained in:
parent
dd268c1b2b
commit
935761f098
|
@ -949,9 +949,9 @@ class FuncargRequest:
|
||||||
self.parentid)
|
self.parentid)
|
||||||
return facdeflist
|
return facdeflist
|
||||||
|
|
||||||
#def raiseerror(self, msg):
|
def raiseerror(self, msg):
|
||||||
# """ raise a FuncargLookupError with the given message. """
|
""" raise a FuncargLookupError with the given message. """
|
||||||
# raise self.funcargmanager.FuncargLookupError(self.function, msg)
|
raise self.funcargmanager.FuncargLookupError(self.function, msg)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def function(self):
|
def function(self):
|
||||||
|
@ -1375,22 +1375,26 @@ class FuncargManager:
|
||||||
for setupcall in setuplist:
|
for setupcall in setuplist:
|
||||||
if setupcall.active:
|
if setupcall.active:
|
||||||
continue
|
continue
|
||||||
testcontext = TestContextSetup(request, setupcall)
|
request._factorystack.append(setupcall)
|
||||||
kwargs = {}
|
try:
|
||||||
for name in setupcall.funcargnames:
|
testcontext = TestContextSetup(request, setupcall)
|
||||||
try:
|
kwargs = {}
|
||||||
kwargs[name] = request.getfuncargvalue(name)
|
for name in setupcall.funcargnames:
|
||||||
except FuncargLookupError:
|
try:
|
||||||
if name == "testcontext":
|
kwargs[name] = request.getfuncargvalue(name)
|
||||||
kwargs[name] = testcontext
|
except FuncargLookupError:
|
||||||
else:
|
if name == "testcontext":
|
||||||
raise
|
kwargs[name] = testcontext
|
||||||
scope = setupcall.scope or "function"
|
else:
|
||||||
scol = setupcall.scopeitem = request._getscopeitem(scope)
|
raise
|
||||||
self.session._setupstate.addfinalizer(setupcall.finish, scol)
|
scope = setupcall.scope or "function"
|
||||||
for argname in setupcall.funcargnames: # XXX all deps?
|
scol = setupcall.scopeitem = request._getscopeitem(scope)
|
||||||
self.addargfinalizer(setupcall.finish, argname)
|
self.session._setupstate.addfinalizer(setupcall.finish, scol)
|
||||||
setupcall.execute(kwargs)
|
for argname in setupcall.funcargnames: # XXX all deps?
|
||||||
|
self.addargfinalizer(setupcall.finish, argname)
|
||||||
|
setupcall.execute(kwargs)
|
||||||
|
finally:
|
||||||
|
request._factorystack.remove(setupcall)
|
||||||
|
|
||||||
def addargfinalizer(self, finalizer, argname):
|
def addargfinalizer(self, finalizer, argname):
|
||||||
l = self._arg2finish.setdefault(argname, [])
|
l = self._arg2finish.setdefault(argname, [])
|
||||||
|
|
|
@ -2338,21 +2338,41 @@ class TestTestContextScopeAccess:
|
||||||
reprec.assertoutcome(passed=1)
|
reprec.assertoutcome(passed=1)
|
||||||
|
|
||||||
|
|
||||||
def test_illdefined_factory(testdir):
|
class TestErrors:
|
||||||
testdir.makepyfile("""
|
def test_subfactory_missing_funcarg(self, testdir):
|
||||||
import pytest
|
testdir.makepyfile("""
|
||||||
@pytest.factory()
|
import pytest
|
||||||
def gen(request):
|
@pytest.factory()
|
||||||
return 1
|
def gen(request):
|
||||||
def test_something(gen):
|
return 1
|
||||||
pass
|
def test_something(gen):
|
||||||
""")
|
pass
|
||||||
result = testdir.runpytest()
|
""")
|
||||||
assert result.ret != 0
|
result = testdir.runpytest()
|
||||||
result.stdout.fnmatch_lines([
|
assert result.ret != 0
|
||||||
"*def gen(request):*",
|
result.stdout.fnmatch_lines([
|
||||||
"*no factory*request*",
|
"*def gen(request):*",
|
||||||
])
|
"*no factory*request*",
|
||||||
|
"*1 error*",
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_setupfunc_missing_funcarg(self, testdir):
|
||||||
|
testdir.makepyfile("""
|
||||||
|
import pytest
|
||||||
|
@pytest.setup()
|
||||||
|
def gen(request):
|
||||||
|
return 1
|
||||||
|
def test_something():
|
||||||
|
pass
|
||||||
|
""")
|
||||||
|
result = testdir.runpytest()
|
||||||
|
assert result.ret != 0
|
||||||
|
result.stdout.fnmatch_lines([
|
||||||
|
"*def gen(request):*",
|
||||||
|
"*no factory*request*",
|
||||||
|
"*1 error*",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
class TestTestContextVarious:
|
class TestTestContextVarious:
|
||||||
def test_newstyle_no_request(self, testdir):
|
def test_newstyle_no_request(self, testdir):
|
||||||
|
|
Loading…
Reference in New Issue