2024 年 Clojure 州情况调查 中分享您的想法!

欢迎!请参阅 关于 页面了解有关此工作的一些更多信息。

0
ClojureScript

cljs.test 报告使用 do-report,它添加来自 JavaScript 栈追踪的文件和行信息。至少在 Chrome 中,这些堆栈追踪并不有用

`
"错误

at https://127.0.0.1:3449/js/cljs/test.js:261:69
at cljs$test$do_report (https://127.0.0.1:3449/js/cljs/test.js:268:3)
at https://127.0.0.1:3449/js/test/test_tests.js:491:21
at test.test_tests.test_has_fails.cljs$lang$test (https://127.0.0.1:3449/js/test/test_tests.js:502:4)
at https://127.0.0.1:3449/js/cljs/test.js:384:42
at https://127.0.0.1:3449/js/cljs/test.js:387:4
at cljs$test$run_block (https://127.0.0.1:3449/js/cljs/test.js:320:13)
..."

`

file-and-line 堆栈追踪解析器无法正确解析,导致如下消息

在 (test-function) (at http:384:42) 中失败

请注意没有有用的文件/命名空间引用,行号指的是编译后的 JavaScript 而不是源 ClojureScript。

3 答案

0
_由 sfnelson 评论

在 cljs.test 发布之前,我的公司维护了一个 clojure.test 的内部端口,它通过将 {{&form}} 的源元数据添加到由 {{assert-expr}} 生成的 {{do-report}} 调用来提供更好的报告。这种方法对于内部使用很好,但不适合 cljs.test,因为它可能会降低 {{assert-expr}} 之间 clojure 和 clojurescript 的可移植性。另一种方法是在由 {{try-expr}} 生成的主体中动态绑定源元数据。如果您能提供一些关于您首选方法的指示,我将愿意实施和贡献代码。

我们的 {{assert-expr}} 版本还注入了一个 'reporter function',{{(function(a,b,c){a.apply(b.c)})}},我们会从 report 中调用它,例如 {{(reporter (.-debug js/console) js/console args)}}。这将导致 Chrome 控制台输出的右侧可点击链接链接到测试表达式的源映射位置,而不是报告函数。
0

由 dnolen 评论

在这里的正确做法是将浏览器REPL堆栈跟踪解析移入共享库,即{{.cljc}},它可以加载到任意环境中以处理浏览器之间的差异。

0
by
参考: https://clojure.atlassian.net/browse/CLJS-1255(由alex+import报告)
...