Тестування на треку Emacs Lisp

Як тестувати свої вправи з Emacs Lisp на Exercism


Тести Elisp запускаються за допомогою ERT, бібліотеки Emacs Lisp для регресійного та модульного тестування. Тести можна запускати кількома способами.

Щоб запустити тести в інтерактивному режимі зсередини Emacs:

  1. Відкрийте файл тестів, M-x eval-buffer RET
  2. Інтерактивно й по одному, за допомогою M-x ert RET test-name RET
  3. Інтерактивно й усі одразу, за допомогою M-x ert RET t RET Зауважте, що це запустить усі тести, наразі завантажені в Emacs!
  4. Перезапускайте M-x eval-buffer RET перед тестуванням щоразу, коли ми внесли зміни

Щоб виконувати лише тести в поточному буфері, можна додати це до нашого .emacs або init.el:

(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))

Після перезапуску Emacs:

  1. Відкрийте файл тестів
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Інтерактивне тестування чудово підходить, поки ми працюємо над вправою, але пакетний режим кращий, коли потрібно перевірити, що вправа готова до подання.

Щоб запустити всі тести з термінала в пакетному режимі, виконайте emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit

Наведена команда трохи громіздка, тож за бажання можна зробити так:

  1. Створіть файл у нашому $PATH (імовірно, у ~/bin) під назвою ert-run
  2. Вміст файлу має бути таким:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. Зробіть файл виконуваним за допомогою chmod +x ert-run

Тоді можна просто викликати ert-run *-test.el і запустити тести в пакетному режимі.

Інші способи описано в документації, C-h i m ert RET.

Робота над вправами

Оскільки сам Emacs виконує роль інтерпретатора elisp, наш робочий код завжди перебуває в рідному середовищі виконання. Можна обчислити будь-яку форму, натиснувши C-x e у кінці форми, або виділений фрагмент за допомогою M-x eval-region, або весь буфер за допомогою M-x eval-buffer. Це може бути надзвичайно корисним для швидкого зневадження нашого коду.

Поради

Оскільки і наш код, і тести - це коректний elisp, радимо працювати з кодом вправи в панелі буфера пліч-о-пліч із його тестом, ось так:

Знімок екрана, що показує Emacs із фреймом, вертикально розділеним на два вікна

Розділіть фрейм вертикально за допомогою C-x 3, перемкніться на нове вікно за допомогою C-x o і відкрийте файл за допомогою C-x C-f /path/to/file.