【问题标题】:python coverage - specify the working directorypython覆盖——指定工作目录
【发布时间】:2021-12-28 16:49:27
【问题描述】:

我有一个名为 edison 的 django 应用程序,其中包含多个 django-apps。我使用覆盖率对它们进行测试:

coverage run --source='.' edison/manage.py test application_one
coverage run --source='.' edison/manage.py test application_two
...

我的回购结构是:

-- edison [the repo name]
    -- edison [a django application]
    -- schuedled_jobs
    -- internal_packages

在我的测试文件中,我从internal_packages 目录导入内容,当我运行覆盖命令时出现错误 ModuleNotFoundError: No module named 'internal_packages'。 我的问题是:如何将覆盖范围的工作目录更改为根目录 - 所以它会识别所有模块?

【问题讨论】:

  • 您可能只需将 internal_packages 添加到系统路径即可。 sys.path.append('relative/path/to/internal_packages/from/edison_app_folder')。在导入之前执行此操作。
  • 我最终得到了sys.path.append(os.getcwd()),它解决了我的问题。但我希望在命令行级别解决它,而不是更改我的 python 代码

标签: python django unit-testing testing code-coverage


【解决方案1】:

这可能会解决您的问题。它只是将 repo 目录添加到系统路径中,因此 python 可以找到您请求的内容。

import sys, os

rel = os.path.join(os.getcwd(), '../')
if not rel in sys.path:
    sys.path.append(rel)

from internal_packages import some_module

这提供了比上例中的相对版本更清晰的路径

rel = '/'.join(os.getcwd().split('/')[0:-1])

我相信这也可以通过为您的模块创建一个适当的__init__.py 文件来解决。

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 2017-11-25
    • 2021-02-14
    • 1970-01-01
    • 2010-12-22
    • 2020-08-21
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多