我正在尝试使用需要睡眠的ert来设置一些测试,以便后台进程继续进行.我尝试过使用sleep-for和accept-process-output.两者都不可靠.这是一个小例子.
此测试只是休眠5秒钟,然后检查至少3秒钟.使用sleep-for它立即完成并失败.如果shell-command取消注释,则需要5秒才能成功!这里发生了什么?
(ert-deftest timetest ()
(let ((now (cadr (current-time))))
;(shell-command "sleep 5")
(sleep-for 5)
(should (< now (- (cadr (current-time)) 3)))))
Run Code Online (Sandbox Code Playgroud)
编辑:
当我测试前面的例子时,我的环境肯定有些奇怪.这个稍微改变的示例包含一个像我需要测试的后台进程,但失败了.我以交互方式测试它并使用命令:
emacs --batch -l example.el -f ert-run-tests-batch-and-exit
Run Code Online (Sandbox Code Playgroud)
(ert-deftest timetest ()
(let ((now (cadr (current-time))))
(start-process "echo" "*echo*" "echo" "hello world")
(sleep-for 5)
(should (< now (- (cadr (current-time)) 3)))))
Run Code Online (Sandbox Code Playgroud)
输出是:
Test timetest condition:
(ert-test-failed
((should
(< now
(- ... 3)))
:form
(< 55177 55174)
:value nil))
FAILED 1/1 timetest
Ran …Run Code Online (Sandbox Code Playgroud) 我正在尝试以交互方式运行 Emacs ert 测试,但它没有运行。我按照Emacs ERT 指南来运行此示例测试:
(require 'ert)
(ert-deftest pp-test-quote ()
"Tests the rendering of `quote' symbols in `pp-to-string'."
(should (equal (pp-to-string '(quote quote)) "'quote"))
(should (equal (pp-to-string '((quote a) (quote b))) "('a 'b)\n"))
(should (equal (pp-to-string '('a 'b)) "('a 'b)\n")))
Run Code Online (Sandbox Code Playgroud)
从缓冲区执行此测试M-x ert RET t RET将输出:
Selector: t
Passed: 0
Failed: 0
Skipped: 0
Total: 0/0
Started at: 2016-03-16 21:15:10+0100
Finished.
Finished at: 2016-03-16 21:15:10+0100
Run Code Online (Sandbox Code Playgroud)
但如果从控制台执行(以批处理模式),它会起作用:
$ emacs -batch -l ert -l test.el -f ert-run-tests-batch-and-exit
Running …Run Code Online (Sandbox Code Playgroud) 当我尝试在emacs项目中运行测试文件时遇到一个问题。
例如,我将此项目克隆到主目录中,将cd 克隆到测试目录中,然后用于emacs -batch -l ert -l nrepl-tests.el -f ert-run-tests-batch-and-exit运行测试。但是找不到文件nrepl.el,该文件不在同一目录中。因此,我将其中一个复制到〜/ nrep.el / test中。但是它说“无法打开加载文件:clojure-mode”。这是我要提出的问题。
我确实有clojure-mode和其他使用nrepl.el的库。但是它们都在不同的目录中(在我的情况下是〜/ emacs.d / packs / live / clojure-pack / lib /)。为了运行测试,是否必须将这些文件复制到克隆的nrepl项目中?是否有更好的方法可以像在IDE中一样运行测试文件。例如,在Intellij中,我只需在测试文件中编写import语句,它就会自动为我准备依赖库。这让我很困扰。我想知道是否有针对此问题的最佳实践。