2024 Cloujure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以获取更多关于此方式的信息。

+7
测试

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

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

提议: 建议的补丁 (clj840-20161122.diff) 允许 'each' 测试环境通过使用 * } 来访问当前正在执行的测试关联的变量。由于这个变化,'each' 测试环境能够访问与当前测试变量关联的元数据,包括名称。

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

补丁: clj840-20161122.diff

你好,我想提出,我认为在我在工作的 Clojure 测试库中添加这个功能将是有用的。

对我来说,Duncan 的 4 行补丁,该补丁添加 `*test-var*` 并将其绑定在 `each-fixture-fn` 形式周围就足够了。

我将在使用基本的 `clojure.test` 块(`deftest` + fixtures)实现的 `state-flow` 测试库中,使用这个功能,以便更好地集成现有的 Clojure 工具生态系统。由于无法访问瑕疵中的当前测试变量,我无法在瑕疵中执行某些测试设置(https://gist.github.com/philomates/32f8e1f7a2a4e746ac0186964aaaa2d3#file-flow-clj-L74 通过代码勾画出用例)

17 答案

0 投票

评论者:stuart.sierra

或者直接将 Var 传入瑕疵中。Vars 可以调用。

0 投票

评论者:hugoduncan

我认为这不起作用,因为传入瑕疵函数的不是测试 Var,而是一个调用 {{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 中调用(Vars 的命名空间可通过其元数据获得)。但是,这意味着每次调用 {{test-var}} 都需要在其中调用 {{join-fixtures}}。

0 投票

评论者:stuart.sierra

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

这使得 * } 对 {{:each}} 瑕疵函数可见,这在直觉上似乎更合适。

但是,它略微改变了 {{test-var}} 的行为,这不是我喜欢的。

0 投票
作者

评论者:hugoduncan

在 * } 上提供获取当前 test-var 的函数,这样做是否有意义?

0 投票
作者

评论者:stuart.sierra

不是的,这个函数是 {{first}}

0 投票
作者

评论者:hugoduncan

我同意将动态变量作为扩展接口的一部分,但认为为编写测试提供一个函数将会更加简洁。仅代表个人观点。

0 投票
作者

评论者:jafingerhut

在 2013 年 11 月 22 日提交的一个补丁中,补丁文件 clj840-2.diff 无法干净地应用于最新的 master 版本。更新它似乎很简单,但是最好由熟悉这部分代码的人来做。

0 投票
作者

评论者:joelittlejohn

如果这个问题能被修复,我会觉得非常实用。

我已经添加了一个更新后的补丁,它与 clj840-2.diff 内容相同,但适用于当前的 master 版本(c0326d2),截至 2016 年 11 月 22 日。

0 投票
作者

评论者:joelittlejohn

我意识到我只是翻译了其他人提供的补丁文件,但如果您认为在将其送审之前还需要进一步的修改,请提出意见,我将尽力添加。”

0 投票

评论由:alexmiller

如果您能更新工单以更好地描述补丁的方法,那将会有所帮助。

0 投票

评论者:joelittlejohn

提出的补丁(clj840-20161122.diff)允许'each'固定装置通过使用*}访问当前正在执行的测试关联的var。由于这个变化,'each'固定装置能够访问与当前测试var关联的元数据,包括名称。

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

希望这样已经清楚,ish :)

0 投票

评论者:joelittlejohn

这个提议补丁现在是考虑加入的时机吗?文件clj840-20161122.diff仍然有效,可以应用到master的当前HEAD。

0 投票

评论由:alexmiller

你能检查一下更改函数顺序是否影响do-report中的堆栈跟踪检查吗?基本来说,了解所有各种情况(既不是each也不是once,是each但不是once,是once但不是each,以及两者都是)中错误报告对所有这些情况均无影响将是有帮助的。此外,工具如Leiningen也会对该部分进行monkeypatch。我认为所有这些都很好,但我可能不会很快检查所有这些。

...