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 的内部端口,它通过向 {{do-report}} 调用添加来自 {{&form}} 的源元数据,从而比 cljs.test 提供了更好的报告。这种方法对于内部使用来说很棒,但对于 cljs.test 可能不合适,因为它可能会减少 {{assert-expr}} 之间的 clojure 和 clojurescript 的可移植性。另一种方法是将源元数据动态绑定到由 {{try-expr}} 生成的主体中。如果您能提供一些关于您首选方法的指示,我愿意实现并贡献代码。

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

评论人:dnolen

在这里正确做的事是将浏览器REPL堆栈跟踪解析移至共享库,即{{.cljc}},这样既可以加载到任何环境中以处理浏览器差异。

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