Function: projectile-run-test-at-point
projectile-run-test-at-point is an autoloaded, interactive and
byte-compiled function defined in projectile.el.
Signature
(projectile-run-test-at-point ARG)
Documentation
Run the test around point, if any.
The test is located by walking up the buffer's tree-sitter parse
tree according to the rule for the buffer's major mode in
projectile-test-at-point-rules, which also determines the command
used to run it. Requires Emacs 29+ built with tree-sitter support
and a tree-sitter major mode (e.g. python-ts-mode).
The command runs like projectile-test-project does (same working
directory and buffer-saving behavior), but it is not recorded as the
project's test command and doesn't touch the command history. With
a prefix ARG you can edit the command before it's run.
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/projectile-20260820.1509/projectile.el
;;;###autoload
(defun projectile-run-test-at-point (arg)
"Run the test around point, if any.
The test is located by walking up the buffer's tree-sitter parse
tree according to the rule for the buffer's major mode in
`projectile-test-at-point-rules', which also determines the command
used to run it. Requires Emacs 29+ built with tree-sitter support
and a tree-sitter major mode (e.g. `python-ts-mode').
The command runs like `projectile-test-project' does (same working
directory and buffer-saving behavior), but it is not recorded as the
project's test command and doesn't touch the command history. With
a prefix ARG you can edit the command before it's run."
(interactive "P")
(unless (and (fboundp 'treesit-available-p) (treesit-available-p))
(user-error "This command requires Emacs 29+ built with tree-sitter support"))
(unless (treesit-parser-list)
(user-error "No tree-sitter parser in this buffer; use a tree-sitter major mode (e.g. `python-ts-mode')"))
(unless buffer-file-name
(user-error "The current buffer is not visiting a file"))
(let ((rule (projectile--test-at-point-rule)))
(unless rule
(user-error "No test-at-point rule for `%s'; see `projectile-test-at-point-rules'"
major-mode))
(let ((test-name (projectile--test-at-point-name rule)))
(unless test-name
(user-error "No test found at point"))
;; The command runs in the compilation directory, so the file
;; name is made relative to it as spelled - not through
;; `file-truename', which would escape the project for a file
;; under a symlinked subdirectory and yield a useless `../..' path.
(let ((command (funcall (plist-get rule :command-fn)
test-name
(file-relative-name
buffer-file-name
(projectile-compilation-dir))))
;; The command was derived from the test at point, so the
;; usual `compilation-read-command' prompt doesn't apply;
;; prompt only when explicitly asked to with a prefix arg.
(compilation-read-command nil))
;; A nil command-map keeps the project's cached test command and
;; command history untouched - the command type is still declared,
;; so this shares the test compilation buffer and the test history
;; at the prompt.
(projectile--run-project-cmd command nil
:command-type 'test
:show-prompt arg
:prompt-prefix "Test at point command: "
:save-buffers t
:use-comint-mode (projectile-use-comint-mode-p 'test))))))