【发布时间】:2015-07-08 00:40:37
【问题描述】:
我有一个环绕 mocha 的 Makefile,可以由 npm test 调用。 Makefile 中有几个目标,如下所示:
COMPILERS = --compilers coffee:coffee-script/register
REPORTER = --reporter dot
TEST_DIR = test
SRC = -name test_*.coffee
RUNNER = ${TEST_DIR}/runner.coffee
MOCHA = NODE_ENV=test ./node_modules/mocha/bin/mocha ${COMPILERS} ${REPORTER} ${RUNNER} ${TEST_DIR}
all:
$(MOCHA) $(shell find ${TEST_DIR} ${SRC})
subtest1:
$(MOCHA) $(shell find ${TEST_DIR}/subtest1 ${SRC})
...
现在,这是从package.json 调用的npm test,其中npm test subtest1 仅运行subtest1。但是,允许附加任意 mocha 标志会非常好,例如:
make subtest1 -g "some test I want to run"
这可以通过定义一个ARGS 变量来完成,因此输入:
make subtest1 ARGS="-g 'some test I want to run'"
但这很冗长。
因此,将参数传递给 Mocha 会非常好。
我最接近的是在Makefile 的顶部定义ARGS:
ARGS = $(filter-out all subtest1, $(MAKECMDGOALS))
并将ARGS 附加到MOCHA 变量。然后可以将其称为make subtest1 -- -g "some test I want to run"。这行得通,它运行测试,但make 然后以make: *** No rule to make target-g' 停止。停止。`
在执行 make -- -g "some test I want to run" 时会显示相同的错误消息。
那么,有什么方法可以继续沿着ARGS 路径向下运行,并以某种方式阻止 make 尝试运行在 ARGS 中找到的任何目标,从而允许 all 运行,并且不会出现该错误消息?还是我应该完全改变策略并且有其他方法可以做到这一点?
【问题讨论】:
-
这并不完全是重复的——这个问题没有多个目标,也不适用于它们(至少据我所知)。