Pytest Django 发现 Fixture 但在 运行 上显示 "Not Found"
Pytest Django Discovers Fixture but Says "Not Found" on the Run
我有一个项目,其中每个应用程序都有一个 tests
模块,如下所示:
app1/
tests/
__init__.py
# whatever test files are
app2/
tests/
__init__.py
# whatever test files are
并且您可以猜到项目根目录中还有项目包。它有一个 testing
子包,其中包含模型和字段的基本测试用例,当然还有如下固定装置:
myproject/
__init__.py
# settings and related files, you know
testing/
__init__.py
fixtures.py # for fixtures
# other modules for base test classes and stuff
所以,我的整体项目结构是:
myproject/ # contains standard django stuff and a testing subpackage
app1/ # contains app and tests
app2/ # so as above
# so on and so forth
而项目根目录下的pytest.ini
内容如下:
[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings.development
python_files =
test_*.py
myproject/testing/fixtures.py
addopts = -s
console_output_style = count
log_cli_level = DEBUG
log_print = True
因此,假设 myproject/testing/fixtures.py
包含如下夹具:
# assuming i've imported related stuff
@pytest.fixture # might have different scope
def foo():
"""does foo"""
return "foo"
稍后,我 pytest --fixtures
看看 pytest 是否正确发现了我的固定装置,它确实发现了,这意味着应该没有问题。
但是,当我在项目中运行测试时,出现以下错误:
E fixture 'foo' not found
这很奇怪,因为我可以在 pytest --fixtures
中清楚地看到它。我不知道为什么会发生这种情况或导致这种情况的原因。
环境
- Python 3.7.3
- Pytest 4.4.0
pytest-django
3.4.8
- Django 2.2
如果您有固定装置应保存在单独的模块中并可供整个测试套件访问,最好将该模块注册为插件以确保它在测试收集阶段之前加载。在项目根目录中创建一个名为 conftest.py
的文件,内容为
pytest_plugins = ['myproject.testing.fixtures']
当然,您可以只使用conftest.py
而不是fixtures.py
,然后将灯具放在那里。
我有一个项目,其中每个应用程序都有一个 tests
模块,如下所示:
app1/
tests/
__init__.py
# whatever test files are
app2/
tests/
__init__.py
# whatever test files are
并且您可以猜到项目根目录中还有项目包。它有一个 testing
子包,其中包含模型和字段的基本测试用例,当然还有如下固定装置:
myproject/
__init__.py
# settings and related files, you know
testing/
__init__.py
fixtures.py # for fixtures
# other modules for base test classes and stuff
所以,我的整体项目结构是:
myproject/ # contains standard django stuff and a testing subpackage
app1/ # contains app and tests
app2/ # so as above
# so on and so forth
而项目根目录下的pytest.ini
内容如下:
[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings.development
python_files =
test_*.py
myproject/testing/fixtures.py
addopts = -s
console_output_style = count
log_cli_level = DEBUG
log_print = True
因此,假设 myproject/testing/fixtures.py
包含如下夹具:
# assuming i've imported related stuff
@pytest.fixture # might have different scope
def foo():
"""does foo"""
return "foo"
稍后,我 pytest --fixtures
看看 pytest 是否正确发现了我的固定装置,它确实发现了,这意味着应该没有问题。
但是,当我在项目中运行测试时,出现以下错误:
E fixture 'foo' not found
这很奇怪,因为我可以在 pytest --fixtures
中清楚地看到它。我不知道为什么会发生这种情况或导致这种情况的原因。
环境
- Python 3.7.3
- Pytest 4.4.0
pytest-django
3.4.8- Django 2.2
如果您有固定装置应保存在单独的模块中并可供整个测试套件访问,最好将该模块注册为插件以确保它在测试收集阶段之前加载。在项目根目录中创建一个名为 conftest.py
的文件,内容为
pytest_plugins = ['myproject.testing.fixtures']
当然,您可以只使用conftest.py
而不是fixtures.py
,然后将灯具放在那里。