问题标签 [clojure-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
173 浏览

clojure - 如何在 Clojure 中要求依赖项?

关于项目中的依赖关系,我有两个问题Clojure

  1. 有什么类似:dev-dependencies的东西:test-dependencies我不必全部下载lein run吗?因此,在我运行测试之前,我不需要这些额外的库。

  2. 我可以在一个文件中加载依赖项并在另一个文件中需要这个文件吗?我想要类似的东西:

    /li>
0 投票
1 回答
627 浏览

unit-testing - Clojure - 使用组件策略进行测试

我正在使用 Stuart Sierra 组件实现一个应用程序。正如他在自述文件中所说:

有一种连贯的方式来设置和拆除与应用程序相关的所有状态,可以在不重新启动 JVM 的情况下实现快速的开发周期。它还可以使单元测试更快、更独立,因为创建和启动系统的成本足够低,以至于每个测试都可以创建系统的新实例。

这里的首选策略是什么?类似于 JUnit oneTimeSetUp / oneTimeTearDown 的东西,或者真的在每个测试之间(类似于 setUp / tearDown)?

如果在每次测试之间,是否有一种简单的方法可以为所有测试(之前和之后)启动/停止系统,而无需每次都重复代码?

编辑:示例代码显示我的意思

注意:我在这里谈论单元测试。

0 投票
1 回答
599 浏览

unit-testing - 如何在 clojure.test 中为一组测试设置一个夹具

在我的测试中,我使用类似的东西:

但是,我必须在每个测试模块中复制夹具设置代码。

如何为所有测试设置全局夹具?
或者甚至更好,对于“包”,以便测试api.*包含在启动/停止夹具中。

请注意,在这种情况下,我不关心包装“级别”。以下都可以工作:

0 投票
1 回答
108 浏览

clojure - 在 clojure.test 中是否有等效的 Midje 事实形式?

(facts ...)Midje 中的表格,让我们将一堆(fact ..)表格分组,并(facts ..)在其下添加更多表格。

在clojure.test中编写相应的测试套件时,应该用什么来代替,(facts ...)?clojure 中还有其他类似语义的东西吗?

0 投票
1 回答
121 浏览

clojure - clojure.test 中的线程化箭头私有定义

考虑一个新的 MVE(最小可行示例)命名空间中的以下函数lein new app arrow-mve。函数extract-one是公开的,函数extract-two是私有的。我main-只是为了完整性和它在我的问题中所包含的远程可能性而包含了该功能:

在我的并行测试命名空间中,我可以按如下方式测试这些函数。extract-one我可以通过直接调用或使用箭头线程宏来测试公共函数->。另请注意,在直接调用中extract-two完全引用私有函数 ,我没有问题。Var这些测试通过:

但是当我尝试extract-two使用箭头宏调用私有函数时出现编译错误:

当我让测试变得更复杂一点时,事情变得更奇怪了。

同样,测试以直接调用形式通过:

我怀疑问题是通过deftestis、 的阅读器宏和箭头宏#'进行宏链接的限制Var,并想知道这是设计使然还是潜在的错误。当然,在我的实际应用程序(不是这个 MVE)中,我有长而深的调用链,这使得使用箭头宏非常可取。

0 投票
1 回答
156 浏览

vim - docker上带有nREPL的Vim Fireplace不会运行测试

我有一个运行的 docker 容器(我还通过switchlein repl :start :host 0.0.0.0 :port 7888暴露了端口)。-pdocker run -p 7888:7888

现在,当我切换到 vim 并连接到 REPL 时,一切似乎都按预期工作。我可以通过评估代码,cqp并在该 docker 机器上对其进行评估。

但是,当我想通过cpr组合在测试文件中运行测试时,vim 显示它(clojure.test/run-tests 'users.models.users-it-test)在其状态栏中执行,但没有一个测试真正执行,我也没有得到关于发生了什么的报告。我还可以添加任何失败的测试,例如

但不抛出异常。

更奇怪的是:当我通过cqpthen 执行测试时(clojure.test/run-tests),测试实际上是在运行并打印出正确/失败的结果。

我的 .vimrc 看起来像这样:

0 投票
2 回答
572 浏览

clojure - How to disable test fixtures when no tests are running in the current namespace?

I have seen many clojure projects that disable integration tests by default by adding this setting to project.clj:

But, if a namespace contains only integration tests, the fixtures in it still run when I run lein test!

For example if I run lein new app test and make the contents of core_test.clj this:

Then when I run lein test I see the fixture running even though no tests are run.

What is the correct way to handle this in clojure?

0 投票
2 回答
230 浏览

clojure - 如果比较列表,则 Clojure 的 deftest 宏中的断言错误

我的问题是关于 Clojures deftest 宏或更一般地关于如何比较由函数创建的列表。但我是 Clojure 的新手,无法识别具体原因。也许其他人有想法?

首先报告的消息:

(to-symbol-list-test) (util_test.clj:105)
预期失败:(= (quote (a (not b) c)) (to-symbol-list ["a" "(not b)" " c"]))
实际:(not (= (a (not b) c) (a (not b) c)))

但是很明显,引用的 (= (a (not b) c) (a (not b) c)) 应该是正确的。

二、具体测试代码:

三、to-symbol-list的定义:

该函数甚至应该转换嵌套向量。这是一个示例,其他函数的行为方式相同。我猜这可能是由不同类型引起的。例如列表与惰性序列,我比较惰性函数而不是数据,但类型似乎是正确的。在 REPL 我得到:

0 投票
3 回答
1504 浏览

unit-testing - 如何从`lein test`输出成功的测试?

使用 clojure.test,在运行时lein test,默认设置仅打印出断言的数量,例如“Ran 12 tests contains 19 assertions”、失败测试的详细信息以及测试的命名空间。我也想要成功测试的输出,这样我就可以看到实际运行了哪些测试。JS 中的 Mocha 等框架默认具有此行为。

例如,如果以下测试通过:

我想要这样的输出(格式是任意的):

理想情况下,通过的测试也将采用颜色编码。

我查看了一些库,包括 lein-test-refresh 和 humane-test-output,但没有看到我需要什么。另一个选项看起来像重写 clojure.test 中的报告函数,但如果可能的话,我想避免这种情况。

0 投票
1 回答
184 浏览

clojure - 如何为每次执行生成测试功能,必须测试不同的边缘情况?

你好 Clojure 专家..!,

更新:2018 年 8 月 3 日下午 1:25 CDT - 重新表述了问题以使其更具描述性。

更新:2018 年 8 月 3 日下午 4:10 CDT - 添加了负面情景测试以使其更有意义。

我有一个正在测试的函数/规范(jvm 语言),我想使用 Clojure 生成测试 API 测试正面场景(现在)。

正面场景测试:鉴于 jvm 语言是五个 {"clojure" "haskell" "erlang" "scala" "python"} 之一,结果应该是正确的。

我的问题/要求:我应该用每个可能的有效场景(我在下面的一组中列出)为每次执行(每次我运行,lein 测试)测试我的被测函数,以便我可以摆脱定期单元测试。

根据我的少量测试知识,我认为(对我来说)在同一执行中使用相同的测试场景多次测试我的功能没有任何价值。如果您认为我的思维过程是错误的,请教育我。

  1. 有没有办法使用 Clojure 生成测试来完成我的用例?
  2. 如果没有,这不是一个很棒的功能吗?

    /li>