-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
--import-mode=importlib breaks assertion rewriting #12044
Comments
Ok I was missing that after turning importlib back on, the issue returns, so in fact rewriting fails when importlib is turned on. |
We need to verify what's up here I suspect we are missing a bit where import lib will correctly fail for invalid module names, thus the assertions rewriter does as well, and then we incorrectly fall back to normal module loading Most likely we try to find a test module inside a folder after not doing a sanity check on the filename, after that fails the normal import lib machinery takes over finding the module by path and working I won't be able to verify before next week myself |
I am having this issue as well. It seems that it only happens if I have my tests in a package:
If I remove |
I've had the same issue, the fix from @estyrke works, the test directories were erroneously packages, removing the |
Hitting the same problems, we keep out tests in the packages, but we need importlib to work-around issues with namespaced package. Keeping our tests inside the namespaced package, even by removing the Moving the tests outside the namespace package fix it, but it's an unfortunate limitation. |
Actually, it only keep happening with the config:
Without this, removing the |
I'd noticed this issue recently in a number of my projects. I observed the issue most recently in the cssutils project when another user's bug report was missing helpful detail. I was able to reproduce the issue simply with: draft @ tree
.
└── cssutils
├── __init__.py
└── test_simple.py
2 directories, 2 files
draft @ cat cssutils/*
class val:
val = 1
def test_something_simple():
assert val.val == 0
draft @ pip-run pytest -- -m pytest --import-mode importlib cssutils/test_simple.py
============================================================== test session starts ===============================================================
platform darwin -- Python 3.12.3, pytest-8.2.1, pluggy-1.5.0
rootdir: /Users/jaraco/draft
collected 1 item
cssutils/test_simple.py F [100%]
==================================================================== FAILURES ====================================================================
_____________________________________________________________ test_something_simple ______________________________________________________________
def test_something_simple():
> assert val.val == 0
E AssertionError
cssutils/test_simple.py:6: AssertionError
============================================================ short test summary info =============================================================
FAILED cssutils/test_simple.py::test_something_simple - AssertionError
=============================================================== 1 failed in 0.01s ================================================================ Moving the test to the root, removing the draft [1] @ pip-run 'pytest<8.1' -- -m pytest --import-mode importlib cssutils/test_simple.py
============================================================== test session starts ===============================================================
platform darwin -- Python 3.12.3, pytest-8.0.2, pluggy-1.5.0
rootdir: /Users/jaraco/draft
collected 1 item
cssutils/test_simple.py F [100%]
==================================================================== FAILURES ====================================================================
_____________________________________________________________ test_something_simple ______________________________________________________________
def test_something_simple():
> assert val.val == 0
E assert 1 == 0
E + where 1 = val.val
cssutils/test_simple.py:6: AssertionError
============================================================ short test summary info =============================================================
FAILED cssutils/test_simple.py::test_something_simple - assert 1 == 0
=============================================================== 1 failed in 0.01s ================================================================ In my projects, I'm unable to use any of those workarounds, so I'm hoping there's a more permanent fix in the works. |
I just wasted about 8 hours trying to understand why I was no longer getting assertions rewritten and useful assertion failure output printed. Only after an ugly I wish the importance of not having |
@jmehnle as a pytest user trying to understand why somehow we lost pytest assertion rewriting in our project, and bumping into this issue (which is probably unrelated by the way but I need to continue my journey to be sure ...), I can definitely relate to the frustration. As a open-source project maintainer (not a Pytest maintainer just to be 100% clear), I wish people making this kind of comments would understand how draining this is in the long run for maintainers, in particular this part:
On this kind of topics, I definitely recommend Settings Expectation for open-source participation https://snarky.ca/setting-expectations-for-open-source-participation/. There are some videos of the talk you can find online as well if you prefer video. |
By the way, I do have a fix pending for review: #12313 (We internally use a fork of pytest with this fix successfully) |
Experienced the same problem; confirmed that #12313 fixes it. |
Using
--import-mode=importlib
is more lenient than the defaultimport-mode
, and so it allowed me to use*.test.py
rather than a valid module name e.g.*_.test.py
.Everything seemed to work correctly except explanations were missing:
instead of
The text was updated successfully, but these errors were encountered: