pytester: use monkeypatch.chdir() for dir changing
The current method as the following problem, described by Sadra Barikbin: The tests that request both `pytester` and `monkeypatch` and use `monkeypatch.chdir` without context, relying on `monkeypatch`'s teardown to restore cwd. This doesn't work because the following sequence of actions take place: - `monkeypatch` is set up. - `pytester` is set up. It saves the original cwd and changes it to a new one dedicated to the test function. - Test function calls `monkeypatch.chdir()` without context. `monkeypatch` saves cwd, which is not the original one, before changing it. - `pytester` is torn down. It restores the cwd to the original one. - `monkeypatch` is torn down. It restores cwd to what it has saved. The solution here is to have pytester use `monkeypatch.chdir()` itself, then everything is handled correctly.
This commit is contained in:
@@ -236,15 +236,15 @@ class TestImportPath:
|
||||
name = "pointsback123"
|
||||
p = tmp_path.joinpath(name + ".py")
|
||||
p.touch()
|
||||
for ending in (".pyc", ".pyo"):
|
||||
mod = ModuleType(name)
|
||||
pseudopath = tmp_path.joinpath(name + ending)
|
||||
pseudopath.touch()
|
||||
mod.__file__ = str(pseudopath)
|
||||
monkeypatch.setitem(sys.modules, name, mod)
|
||||
newmod = import_path(p, root=tmp_path)
|
||||
assert mod == newmod
|
||||
monkeypatch.undo()
|
||||
with monkeypatch.context() as mp:
|
||||
for ending in (".pyc", ".pyo"):
|
||||
mod = ModuleType(name)
|
||||
pseudopath = tmp_path.joinpath(name + ending)
|
||||
pseudopath.touch()
|
||||
mod.__file__ = str(pseudopath)
|
||||
mp.setitem(sys.modules, name, mod)
|
||||
newmod = import_path(p, root=tmp_path)
|
||||
assert mod == newmod
|
||||
mod = ModuleType(name)
|
||||
pseudopath = tmp_path.joinpath(name + "123.py")
|
||||
pseudopath.touch()
|
||||
|
||||
Reference in New Issue
Block a user