我们有一个包含多个 Python 包(*)的大型存储库。我希望 scons在每个子目录中而不是从项目根目录中运行 py.test。这证明相当令人沮丧。目前,我已经删除了所有错误检查的此操作:
def runTests (target = None, source = None, env = None):
cmd = which(env['TEST_RUNNER'])
if cmd:
retCode = True
for path in env['TEST_DIR_LIST']:
print 'Doing directory %s:' % (path)
retCode = retCode and subprocess.call([cmd], cwd=path)
env.Exit(retCode)
我在SConstruct
文件中调用它:
runTestsCmd = env.Command('runTests', None, Action(runTests, "Running tests"))
AlwaysBuild(runTestsCmd)
Alias('test', runTestsCmd)
在每个SConscript
文件中,我都有这个:
env.Append(TEST_DIR_LIST = ['PackageDirectory'])
我得到的是只有一个 py.test 实例运行。我可以看到“Doing directory X”消息,但没有运行 py.test。
显然,不需要在 SConscript 中克隆环境,或者如果克隆了 env,请确保添加到 TEST_DIR_LIST 的内容发生在原始 env 上。
所以,我的问题有两个:
- 这是做我想做的事的明智方式吗?
- 如果是,我做错了什么?如果不是,我该怎么办?
(*)是的,我们正在考虑改变这一点。不,它不会很快发生,所以我确实需要上述内容。