我希望修改
理想情况下,我希望能够通过命令行参数
产生以下输出:
cake test
,使其使用不同的值作为*stack-trace-depth*
。
内置定义仅为:(deftask test #{compile}
"Run project tests."
"Specify which tests to run as arguments like: namespace, namespace/function, or :tag"
(run-project-tests))
理想情况下,我希望能够通过命令行参数
--depth=n
来指定值,类似于这样的方式:(binding [*stack-trace-depth* (if (*opts* :depth)
(read-string (*opts* :depth)))]
(run-project-tests))
我需要什么代码才能让这个工作?
根据反馈:将以下内容放入tasks.clj
文件中
(undeftask test)
(deftask test #{compile}
(.bindRoot #'*stack-trace-depth* 5)
(println "Defining task: *stack-trace-depth* is" *stack-trace-depth* "in" (Thread/currentThread))
(run-project-tests))
产生以下输出:
Loading
test/cake_test/core.clj
:
Loading tests: *stack-trace-depth* is nil in #<Thread[thread-13,5,main]>
$ cake test
Defining task: *stack-trace-depth* is 5 in #<Thread[Thread-18,5,main]> In test: *stack-trace-depth* is nil in #<Thread[Thread-16,5,main]> Testing cake-testing.core FAIL in (test-stack-trace-depth) (core.clj:8) expected: (= *stack-trace-depth* 5) actual: (not (= nil 5)) Ran 1 tests containing 1 assertions. 1 failures, 0 errors. ---- Finished in 0.011865 seconds.
(测试代码在Gist上。)
*stack-trace-depth*
设置版本的cake.tasks.test/run-project-tests
的结果)似乎对我有效。现在是时候深入研究Cake并了解它为什么有效,因为我似乎还无法理解代码库。不过它看起来非常酷,感谢让我感兴趣! :-) - Michał Marczyk:test-stack-trace-depth
或其他什么东西?)真正的解决方案要么是使任务(或至少某些特定任务,如“test”)可配置以将某些变量绑定到某些值,要么是使上下文(我还没有完全理解)能够设置变量。我认为这样做会很有趣,但至少要等到星期五才有时间进行休闲编码。 - Michał Marczyk