请分享您的想法到2024年Clojure状态调查!

欢迎!请查阅关于页面,以了解有关此工作的更多信息。

+7
测试

在查看用clojure.test编写的测试的(log)输出时,我希望能够识别与每个测试相关联的输出。在:each fixtures中暴露当前测试变量的机制可实现这一点。

一种机制可能是绑定一个test-var变量与当前的测试变量,然后在clojure.test/test-all-vars中调用每个each-fixture-fn之前。

建议:建议的补丁(clj840-20161122.diff)允许使用*}.通过这种方式,'each' fixtures能够访问与当前测试变量关联的元数据,包括名称。

该补丁通过更改测试及其关联的'each' fixtures运行时的函数包装顺序来实现上述功能。在该补丁之前,'each' fixtures组合成一个单一的高阶函数,然后给它提供一个包含执行{{test-var}}函数调用的thunk作为其主体。之后,现在是{{test-var}}函数负责连接并执行'each' fixtures,但重要的是,它是在添加当前测试变量到*}.的绑定表达式的作用域内执行的。现在,{{test-var}}调用连接的fixtures函数,而不是给连接的fixtures函数提供一个调用{{test-var}}的thunk。

补丁: clj840-20161122.diff

大家好,我想发表一下我的看法,即这个功能的添加会让我在Clojure测试库的工作中觉得非常有用。

对于我的用例,Duncan的4行补丁添加了`*test-var*`并在`each-fixture-fn`表单周围绑定它就足够了。

我会在一个用基本的 `clojure.test` 块(`deftest` + 固定设置)重新实现的 `state-flow` 测试库中使用这个功能,以实现更好的与现有的 Clojure 工具生态系统的集成。没有在固定设置中获得对当前测试变量的访问权限,我在固定设置中找不到执行某些测试设置的方法(https://gist.github.com/philomates/32f8e1f7a2a4e746ac0186964aaaa2d3#file-flow-clj-L74 代码示例中概述了使用场景)。

17 答案

0

由 stuart.sierra 发表的评论

或者直接将 Var 直接传递到固定设置中。vars 可调用。

0

由 hugoduncan 发表的评论

我认为这样做不行,因为传给固定设置中的函数不是测试变量,而是一个调用 {{test-var}} 的函数。

0

由 hugoduncan 发表的评论

添加 test-var 的补丁

0

由 stuart.sierra 发表的评论

                                                                *  } already has this information, but it's not visible to the fixture functions because it gets bound inside {{test-var}}.

也许应该将 {{:each}} 固定设置函数在 {{test-var}} 中调用,而不是在 test-all-vars 中调用。(Var 的命名空间可以在其元数据中找到。)但那样的话,在每次调用 test-var 时都必须调用 {{join-fixtures}}。

0

由 stuart.sierra 发表的评论

尝试这个补丁:clj840-2.diff。

这使得在 {{:each}} fixture 函数中可访问 * },这在直观上看似更正确。

但它在一定程度上改变了 {{test-var}} 的行为,这让我不太高兴。

0

由 hugoduncan 发表的评论

在 * } 上再提供一个函数以返回当前测试变量是不是有意义?

0

由 stuart.sierra 发表的评论

不,那个函数是 {{first}}

0

由 hugoduncan 发表的评论

我同意将动态变量作为扩展接口的一部分,但认为为编写测试时使用而编写的函数会更简洁。这只是我的看法。

0

评论文本:jafingerhut

2013年11月22日的一次提交使得 patch clj840-2.diff 无法干净地应用于最新的 master。最好由熟悉这部分代码的人来更新。

0

评论文本:joelittlejohn

如果这个问题得到解决,我会觉得非常有用。

我已添加一个更新的补丁,该补丁与 clj840-2.diff 内容相同,但针对当前 master(c0326d2),截至 2016 年 11 月 22 日。

0

评论文本:joelittlejohn

我意识到的只是翻译了别人提供的补丁,但如果有任何其他你认为在它能被考虑之前所需的,请随时告诉我,我会尽力添加其他东西。谢谢。

0
by

由 alexmiller发表的评论:

如果您能更新票证,以更好地描述补丁的方法,那将很有帮助。

0
by

评论文本:joelittlejohn

提议的补丁(clj840-20161122.diff)允许 'each' 固定目录通过使用 * } 访问与当前执行测试相关的 var。由于此更改,'each' 固定目录能够访问与当前测试 var 关联的元数据,包括名称。

该补丁通过更改测试及其关联的'each' fixtures运行时的函数包装顺序来实现上述功能。在该补丁之前,'each' fixtures组合成一个单一的高阶函数,然后给它提供一个包含执行{{test-var}}函数调用的thunk作为其主体。之后,现在是{{test-var}}函数负责连接并执行'each' fixtures,但重要的是,它是在添加当前测试变量到*}.的绑定表达式的作用域内执行的。现在,{{test-var}}调用连接的fixtures函数,而不是给连接的fixtures函数提供一个调用{{test-var}}的thunk。

希望这很清晰,呵呵 :)

0
by

评论文本:joelittlejohn

现在有可能会把这个考虑进去吗?文件 clj840-20161122.diff 仍然有效,并且可以应用到 master 分支的当前 HEAD。

0
by

由 alexmiller发表的评论:

你能检查更改函数顺序是否影响了 do-report 中的堆栈跟踪检查吗?基本上,对于那些各种情况(既不是 each 也不是 once,each 但不是 once,once 但不是 each,以及两个),需要知道错误报告在所有这些情况中都没有受到影响。此外,像 Leiningen 这样的工具也修补了这个部分的某些部分。我认为所有这些都没问题,但我可能不会很快检查所有这些。

...