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) 失败 (位于 http:384:42)

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

3 个答案

0
_由 sfnelson 评论

在我公司推出 cljs.test 之前,我们维护了一个内部 clojure.test 的端口,它可以比 cljs.test 提供更好的报告,原因是为了 {{&form}} 添加了源元数据,从而生成了由 {{assert-expr}} 生成的 {{do-report}} 调用。这种方法对于内部使用很棒,但可能不适合 cljs.test,因为它会降低 {{assert-expr}} 在 clojure 和 clojurescript 之间的可移植性。另一个方法可以在由 {{try-expr}} 生成的主体中动态绑定源元数据。如果你们能提供一些关于你想要的方案的指示,我将乐意实现并贡献代码。

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

由 dnolen 评论

在这里正确的方法是将浏览器REPL堆栈跟踪解析移动到一个共享库(例如{{.cljc}}),这样就可以在任一环境中加载以处理浏览器差异。

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