我的circle.yaml文件中有此运行步骤,未设置结帐或工作目录:
- run:
name: Running dataloader tests
command: venv/bin/python3 -m unittest discover -t dataloader tests
此问题是-t
标志中的工作目录未设置。尝试在moduleNotFound
类内查找assertions
文件夹时出现dataloader
错误。
我的树:
├── dataloader
│ ├── Dockerfile
│ ├── Makefile
│ ├── README.md
│ ├── __pycache__
│ ├── assertions
但这可行:
version: 2
defaults: &defaults
docker:
- image: circleci/python:3.6
jobs:
dataloader_tests:
working_directory: ~/dsys-2uid/dataloader
steps:
- checkout:
path: ~/dsys-2uid
...
- run:
name: Running dataloader tests
command: venv/bin/python3 -m unittest discover -t ~/app/dataloader tests
关于可能发生的事情的任何想法吗?
为什么第一个仅使用-t标志不起作用?
带有路径的working directory
和checkout
实际做什么?我什至不知道为什么我的解决方案有效。
答案 0 :(得分:1)
必须指定从顶部到测试文件夹的确切路径,才能进行“发现”。例如:“ python -m unittest discover src / main / python / tests”。这一定是其在第二种情况下起作用的原因。
最有可能是“单元测试发现”的错误,当您明确指定命名空间包作为发现目标时,发现就起作用了,但不会递归到namespace_pkg中的任何命名空间包中。因此,当您只运行“ python3 -m unittest discover”时,它并不会进入cwd中的所有名称空间包(主要是文件夹)。
正在进行一些PR(例如:issue35617)来解决此问题,但尚未发布
答案 1 :(得分:0)
检出 =用于将源代码检出到配置路径的特殊步骤(默认为working_directory)。这是一个特殊步骤的原因是,它更多地是一个帮助程序功能,旨在使您轻松签出代码。如果您需要通过HTTPS执行git,则不应使用此步骤,因为它将git配置为通过ssh签出。
working_directory =在哪个目录中运行步骤。默认值:〜/ project(其中project是文字字符串,而不是您特定项目的名称)。作业期间运行的进程可以使用$ CIRCLE_WORKING_DIRECTORY环境变量来引用此目录。注意:不会扩展写入YAML配置文件的路径;如果您的store_test_results.path是$ CIRCLE_WORKING_DIRECTORY / tests,则CircleCI将尝试存储名为$ CIRCLE_WORKING_DIRECTORY的目录的测试子目录,美元符号$以及所有。