#1642 Add rootdir option
This commit is contained in:
parent
01e37fe892
commit
d784155fd2
1
AUTHORS
1
AUTHORS
|
@ -138,6 +138,7 @@ Ned Batchelder
|
|||
Neven Mundar
|
||||
Nicolas Delaby
|
||||
Oleg Pidsadnyi
|
||||
Oleg Sushchenko
|
||||
Oliver Bestwalter
|
||||
Omar Kohl
|
||||
Omer Hadari
|
||||
|
|
|
@ -33,6 +33,9 @@ def pytest_addoption(parser):
|
|||
parser.addini("testpaths", "directories to search for tests when no files or directories are given in the "
|
||||
"command line.",
|
||||
type="args", default=[])
|
||||
parser.addini("rootdir", "define root directory for tests. If this parameter defined command argument "
|
||||
"'--rootdir' will not work",
|
||||
type="args", default=[])
|
||||
# parser.addini("dirpatterns",
|
||||
# "patterns specifying possible locations of test files",
|
||||
# type="linelist", default=["**/test_*.txt",
|
||||
|
@ -53,6 +56,11 @@ def pytest_addoption(parser):
|
|||
group._addoption("--continue-on-collection-errors", action="store_true",
|
||||
default=False, dest="continue_on_collection_errors",
|
||||
help="Force test execution even if collection errors occur.")
|
||||
group._addoption("--rootdir", action="store",
|
||||
dest="rootdir",
|
||||
help="Define root directory for tests. Can be relative path: 'root_dir', './root_dir', "
|
||||
"'root_dir/another_dir/'; absolute path: '/home/user/root_dir'; path with variables: "
|
||||
"'$HOME/root_dir'. If parameter 'rootdir' defined in *.ini file this argument will not work")
|
||||
|
||||
group = parser.getgroup("collect", "collection")
|
||||
group.addoption('--collectonly', '--collect-only', action="store_true",
|
||||
|
@ -283,6 +291,17 @@ class Session(nodes.FSCollector):
|
|||
self.trace = config.trace.root.get("collection")
|
||||
self._norecursepatterns = config.getini("norecursedirs")
|
||||
self.startdir = py.path.local()
|
||||
|
||||
rootdir_ini = config.getini('rootdir')
|
||||
self.rootdir = rootdir_ini[0] if rootdir_ini else config.option.rootdir
|
||||
if self.rootdir:
|
||||
rootdir_abs_path = py.path.local(self.rootdir)
|
||||
if not os.path.isdir(str(rootdir_abs_path)):
|
||||
raise UsageError("Directory '{}' not found. Check your '--rootdir' option.".format(rootdir_abs_path))
|
||||
config.invocation_dir = rootdir_abs_path
|
||||
config.rootdir = rootdir_abs_path
|
||||
sys.path.append(str(rootdir_abs_path))
|
||||
|
||||
self.config.pluginmanager.register(self, name="session")
|
||||
|
||||
def _makeid(self):
|
||||
|
|
|
@ -253,3 +253,35 @@ def test_sessionfinish_with_start(testdir):
|
|||
""")
|
||||
res = testdir.runpytest("--collect-only")
|
||||
assert res.ret == EXIT_NOTESTSCOLLECTED
|
||||
|
||||
|
||||
def test_rootdir_option_arg(testdir):
|
||||
rootdir = testdir.mkdir("root")
|
||||
rootdir.join("spoon.py").write("spoon_number = 1")
|
||||
testsdir = rootdir.mkdir("tests")
|
||||
testsdir.join("test_one.py").write("from spoon import spoon_number\ndef test_one():\n assert spoon_number")
|
||||
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines(["*No module named*spoon*"])
|
||||
|
||||
result = testdir.runpytest("--rootdir=root")
|
||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||
|
||||
|
||||
def test_rootdir_option_ini_file(testdir):
|
||||
rootdir = testdir.mkdir("root")
|
||||
rootdir.join("spoon.py").write("spoon_number = 1")
|
||||
testsdir = rootdir.mkdir("tests")
|
||||
testsdir.join("test_one.py").write("from spoon import spoon_number\ndef test_one():\n assert spoon_number")
|
||||
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines(["*No module named*spoon*"])
|
||||
testdir.makeini("""
|
||||
[pytest]
|
||||
rootdir=root
|
||||
""")
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||
result = testdir.runpytest("--rootdir=ignored_argument")
|
||||
print(result.stdout.str())
|
||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||
|
|
Loading…
Reference in New Issue