标签: ert

Elisp:在ert中运行测试时,sleep-for不会阻塞

我正在尝试使用需要睡眠的ert来设置一些测试,以便后台进程继续进行.我尝试过使用sleep-foraccept-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 elisp ert

3
推荐指数
1
解决办法
678
查看次数

无法以交互方式运行 Emacs ERT 测试

我正在尝试以交互方式运行 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 unit-testing elisp ert

3
推荐指数
1
解决办法
453
查看次数

有没有更好的方法来解决emacs lib依赖关系?

当我尝试在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语句,它就会自动为我准备依赖库。这让我很困扰。我想知道是否有针对此问题的最佳实践。

emacs unit-testing elisp dependency-management ert

1
推荐指数
1
解决办法
96
查看次数

标签 统计

elisp ×3

emacs ×3

ert ×3

unit-testing ×2

dependency-management ×1