Tesztelés az Emacs Lisp kurzuson

Tanuld meg, hogyan tesztelheted az Emacs Lisp feladataidat az Exercism-ön


Az elisp teszteket az ERT segítségével futtatjuk, amely egy Emacs Lisp könyvtár regressziós és egységteszteléshez. A teszteket többféleképpen is futtathatod.

Ha az Emacsen belülről szeretnéd interaktívan futtatni a teszteket:

  1. Nyisd meg a tesztfájlt, majd M-x eval-buffer RET
  2. Interaktívan, egyenként, ezzel: M-x ert RET test-name RET
  3. Interaktívan, egyszerre az összessel, ezzel: M-x ert RET t RET Vedd figyelembe, hogy ez az összes jelenleg az Emacsbe betöltött tesztet lefuttatja!
  4. Ha változtattál valamit, a tesztelés előtt futtasd újra a M-x eval-buffer RET parancsot

Ha csak az aktuális pufferben lévő teszteket szeretnéd futtatni, ezt hozzáadhatod a .emacs vagy init.el fájlodhoz:

(defun my-eval-and-run-all-tests-in-buffer ()
  "Delete all loaded tests from the runtime, evaluate the current buffer and run all loaded tests with ert."
  (interactive)
  (ert-delete-all-tests)
  (eval-buffer)
  (ert 't))

Az Emacs újraindítása után:

  1. Nyisd meg a tesztfájlt
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Az interaktív tesztelés remek, amíg egy feladaton dolgozol, de ha azt szeretnéd ellenőrizni, hogy egy feladat készen áll-e a beküldésre, a batch módban történő tesztelés a jobb választás.

Ha a terminálból, batch módban szeretnéd lefuttatni az összes tesztet, add ki ezt a parancsot: emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit

A fenti parancs kicsit nehézkes, szóval ha szeretnéd:

  1. Hozz létre egy ert-run nevű fájlt a $PATH-odban (valószínűleg a ~/bin mappában)
  2. A fájl tartalma a következő legyen:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. Tedd a fájlt futtathatóvá ezzel: chmod +x ert-run

Ezután egyszerűen meghívhatod az ert-run *-test.el parancsot, és a tesztek batch módban lefutnak.

További lehetőségeket a dokumentációban találsz: C-h i m ert RET.

Feladatokon dolgozva

Mivel az Emacs maga is egy elisp-értelmező, a kódod mindig a saját natív futtatási környezetében van. Bármelyik formot kiértékelheted úgy, hogy a form végén megnyomod a C-x e billentyűkombinációt, egy kijelölést a M-x eval-region, a teljes puffert pedig a M-x eval-buffer paranccsal. Ez rendkívül hasznos lehet a kódod gyors hibakereséséhez.

Javaslatok

Mivel a kódod és a tesztjeid is érvényes elisp, érdemes a feladat kódját egy pufferablakban, egymás mellett megnyitni a tesztjével, így:

Képernyőkép az Emacsról, amelyen a keret függőlegesen két ablakra van osztva

Oszd fel a keretet függőlegesen a C-x 3 billentyűkombinációval, válts át az új ablakra a C-x o paranccsal, és nyisd meg a fájlt a C-x C-f /path/to/file paranccsal.