Skip to content
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

Provide a way to automatically treat all async tests as trio tests #9

Closed
njsmith opened this issue Dec 9, 2017 · 1 comment
Closed

Comments

@njsmith
Copy link
Member

njsmith commented Dec 9, 2017

We don't want to do this by default, because then we get into the situation where all the different pytest-{asyncio,trio,curio,...} plugins fight over which tests are theirs. And we want to preserve the option to mark individual tests with @pytest.mark.trio, for projects that want to use multiple pytest-* plugins at the same time.

But for the common case of a project that uses only trio, there should be some way to opt-in to automatic detection of async tests as trio tests.

An option in pytest.ini is one obvious thing. We should also give a way for conftest.py to opt-in directly, for the use of projects that ship their tests along with their source code but can't easily ship a pytest.ini.

What would be really neat was if we could limit the conftest.py opt-in to the subdirectory that conftest.py applies to. I'm not sure if there's a way to do that.

@njsmith
Copy link
Member Author

njsmith commented Dec 9, 2017

I guess one option for marking things in conftest would be to tell people to write

from pytest_trio.automark import *

where pytest_trio/automark.py contains a plugin hook that sniffs test to see if they're async, and if so then automatically applies the trio marker.

This is evil and magical: the idea is to exploit pytest's magic where every conftest.py file is automatically treated as a pytest plugin that's applied only to the tests inside the same directory as that conftest.py. And the effects of a pytest plugin are determined by the contents of its namespace. So if we import a hook function, then that hook function becomes part of this "conftest plugin", and is applied where-ever the conftest is in scope.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant