gpt4 book ai didi

python - Pytest Django 发现 Fixture 但在运行时显示 "Not Found"

转载 作者:行者123 更新时间:2023-12-01 08:05:30 25 4
gpt4 key购买 nike

我有一个项目,其中每个应用程序都有一个 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-django3.4.8
  • Django 2.2

最佳答案

如果您的固定装置应保存在单独的模块中并可供整个测试套件访问,那么最好将该模块注册为插件,以确保它在测试收集阶段之前加载。在项目根目录中创建一个名为 conftest.py 的文件,其中包含以下内容

pytest_plugins = ['myproject.testing.fixtures']

当然,您可以只使用 conftest.py 而不是 fixtures.py 并将 fixture 放在那里。

关于python - Pytest Django 发现 Fixture 但在运行时显示 "Not Found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55557281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com