问题标签 [clojure.test]

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 投票
1 回答
302 浏览

clojure - 为什么我的 `with-redefs-fn` 重新绑定被忽略了?

我正在尝试替换 中的stacktrace-file-and-line(私有)函数clojure.test,但是with-redefs-fn在运行测试时使用似乎没有效果。当我执行以下代码时,stacktrace-file-and-line调用的是原始代码而不是我的匿名函数。

with-redefs-fn不适用于私有函数,或者命名空间是否存在阻止其工作的东西clojure.test

0 投票
1 回答
405 浏览

clojure - lein 有没有办法从 jar 文件运行 clojure 测试?

我想构建一个包含一组clojure.test测试的 jar 文件,然后lein test用来运行这些测试。据我所知,:test-paths仅支持测试源的路径,不支持测试 jar。

有没有办法做到这一点?

0 投票
1 回答
158 浏览

unit-testing - with-redefs 在 Windows 上的特定项目中不起作用

我很难在 Clojure 中创建一个简单的单元测试,with-redefs用于在 Windows 上进行模拟。测试代码、我要测试的函数和要模拟的函数都在不同的命名空间/文件中:

被测功能:

要模拟的依赖 b 命名空间:

测试代码

我认为我使用with-redefs正确,因为我的单元测试在 Linux机器(docker 容器或虚拟 Ubuntu)上运行良好,但在我的 Windows 开发机器上执行/开发它们时它不起作用:with-redefs绑定没有应用并且测试想要进行真实的 http 调用,我想模拟一下。如果我运行lein test,或者尝试通过 Eclipse CCW 从 REPL 执行测试,情况也是如此。

我知道 with-redefs 有一些奇怪的行为,但是由于我的测试在 Linux 上运行良好,我想在 Windows 上运行这个项目的测试时我错过了一些东西。在我的 Windows 机器上编写测试时,我想实现快速反馈循环。

你知道我做错了什么吗?谢谢, 安德拉斯

0 投票
1 回答
137 浏览

clojure - 从 clojure.spec 生成的样本数据的测试序列

语境

  • 我有一个对数据结构进行操作的函数。
  • 我已经为这个函数操作的数据结构编写了一个规范。
  • 此函数返回在浏览器中呈现的试剂组件 (PhantomJS)
  • 规范有一些可选的键,根据传递给函数时数据中是否存在这些键,上述函数的输出(要在浏览器中呈现的组件)会受到影响。
  • 我希望使用clojure.test将传递给生成组件的函数的数据结构的值与从渲染元素中获取的值进行比较,因此简单的单元测试或输入->输出比较不是我要在这里进行的。

问题

由于在规范生成器上调用generateorsample有时会包含或省略可选字段,我想迭代使用sample并测试每个数据结构生成的相当大的数据集,但我不知道“正确”或惯用方法来做到这一点。

我以前用过areclojure.test这很好,但是因为我正在对浏览器中的渲染组件进行测试,并are测试输入-> 输出,所以它似乎不是适合这项工作的工具。

对于此处普遍接受的做法或 language/clojure.test 功能的建议,如果我能以最惯用的方式执行此操作,我们将不胜感激。

0 投票
2 回答
45 浏览

clojure - 编写测试时无法删除重复

我无法删除clojure.test测试中的重复。

假设我对同一个抽象有多个实现:

而且我还有一个测试所有实现都应该通过:

我现在可以创建一个clojure.test测试,在一个步骤中检查所有实现:

一切都很好; 在 REPL 中运行测试我得到:

我现在想修改以消除必须为每个实现显式test-all-impls调用的重复。test-impl我想到要修改test-all-impls如下:

嗯,现在并非一切都好;在 REPL 我得到:

我错过了什么?

0 投票
1 回答
344 浏览

clojure - lein test with-profile 无法覆盖测试配置文件的 env 值

我正在做一些 Clojure 宠物项目。我有一些配置文件,如下所示

现在我正在尝试为该项目设置 Travis-CI。我想在运行测试时覆盖测试配置文件 CI 的值,为此我使用以下命令

lein with-profile travis 测试

这里 lein 正在激活travis配置文件,但它从测试配置文件而不是travis配置文件中获取环境变量值。

有没有人遇到过这样的问题?

0 投票
1 回答
477 浏览

testing - 具有多个断言和报告的 Clojure 测试

我在使用 clojure.test 测试框架报告失败时遇到了一些问题。

现在,我知道我可以为不同的报告覆盖一些函数,以便它打印到控制台或我想要打印到的任何地方。我也知道我可以将此输出保存到文件中。

我的问题如下......当我像这个例子一样声明一个deftest时:

(deftest test1 (is (= 1 1) (is (= 2 1))

这个测试将运行,如果我做类似的事情,(run-tests)否则(test-var #'test1)它将返回nil 但打印失败。

我决定重写 :fail 报告方法,因为我想要的是这样的失败地图:{"expected" (:expected m), "actual" (:actual m)}如果我只使用报告功能,这有点工作。

问题是,当您通过 Clojure.test 框架运行测试时,会调用许多宏,但它的行为并不完全符合我的要求。

我的最终目标是:运行测试,如果有任何失败,而不是打印它们,将它们保存到地图并将地图返回给我。如果他们都通过了,那么我不在乎它会给我带来什么。

这甚至可能吗?如果某个测试失败,我不想停止测试,我只想将它记录在某个地方,最好是地图。


资料来源:

具有多个断言的 Clojure 测试

https://clojure.github.io/clojure/branch-1.1.x/clojure.test-api.html

https://groups.google.com/forum/#!topic/clojure/vCjso96wqps

0 投票
2 回答
268 浏览

testing - 是否有一种(惯用的)方法可以在 Clojure 中测试 IO 函数的结果?

我有一个将一些文本保存到文件的函数:

它工作正常(目前通过打开文件并自己查看来检查)。但是,我想编写一个实际测试来检查一切是否正常。在 Clojure 中是否有一种惯用的方式来做到这一点?

0 投票
1 回答
58 浏览

unit-testing - 当结果是函数时,无法测试为真(编译时出现语法错误。没有这样的 var:...)

当我想测试结果是另一个函数的函数时发生。我有这样的事情:

在测试中:

repl 中的结果是:

我知道我必须放 f/index-forward 而不是 repl [flexsearch.core/index-forward] 的结果,但它不适用于 f/init/fn--14976 (No such var: f /init/fn--14976)

我认为这是 vars 的一个技巧,但我不知道它是如何工作的。你能提供的任何读物我将不胜感激

---编辑--- f/index-forward 和 f/encoder-icase 符号工作正常。

---编辑2---我已经定义:

并将其用于:

我得到了一个类似的“:tokenizer #function[flexsearch.core/spliter/fn--34857]”,我在测试中使用它,它也失败了——</p>

0 投票
1 回答
287 浏览

clojure - 为什么我的 AWS CodeBuild 测试报告会导致“未完成”状态?

我试图了解为什么我的 JUnit XML 报告会在 AWS CodeBuild 上导致不完整状态。

XML 由 Clojure 测试运行程序 Kaocha 通过其kaocha-junit-xml plugin.

在我的测试运行结束时,会生成 XML,然后UPLOAD_ARTIFACTS在它进行计算的阶段进行处理,结果是:

每个测试我确实有多个断言,因此每个测试可能有超过 1 个失败。为了验证我没有错误的 JUnit XML 文件,我安装了 Jenkins 并运行了几个测试,这些测试有效并且它不会以Incomplete报告状态结束。

请注意,Test Run 状态为Failed,只有 Report 状态为Incomplete