
Plentest.nvim
https://github.com/nvim-treesitter/plentest.nvim- Category
- Developer Tools
- Rank
- No. 1829Tools index
Previous survey · No. 1837 ·
- Pricing
- Open Source
- Type
- TOOL
- Builder
- nvim-treesitter
- GitHub
- 1 stars
- Date
About
Lightweight self-contained busted-style testing harness for Neovim. Drop-in test runner for plugin authors.
What it does
Plentest runs Lua specifications inside separate headless Neovim processes, discovers spec files in a directory, and reports colored pass, failure, pending, and error results. Its familiar suite syntax includes nested descriptions, per-test setup and teardown, assertions, spies, mocks, and stubs.
Why it's ranked here
The appeal is tight scope and controlled dependencies: the assertion and message libraries are vendored, while tests execute against Neovim itself. The decisive caveat is unusually explicit. Its own documentation says it is not intended for public use and directs readers to another project.
What's good
Each specification receives its own headless Neovim process, which gives plugin code a real editor runtime. Directory discovery, configurable initialization, timeouts, exit codes, nested suites, hooks, pending cases, and detailed assertion helpers cover the practical core of automated plugin checks without an external assertion installation.
Tradeoffs
The public-use warning makes long-term adoption hard to justify outside its intended internal context. Several exposed options appear inert, including sequential execution, continued execution, and window settings. Pending cases are printed but excluded from the summary, and the runner does not distinguish assertion failures from other test errors inside individual cases.
How to use it well
It best fits maintainers who control a Neovim plugin repository and want compact, process-isolated Lua checks in automation. Pin the dependency, supply a minimal editor configuration when isolation matters, and treat timeout behavior carefully. It does not cover supported public distribution, broader editor integration testing, or a general-purpose Lua test environment outside Neovim.
Technical notes+
lua/plentest.lua discovers *_spec.lua files with vim.fs.find, builds one --headless Neovim command per path, launches every command through vim.system, and maps nonzero child codes to :1cq. minimal_init adds --clean -u <path>, while timeout is passed to vim.wait and exported as PLENTEST_TIMEOUT. The sequential, keep_going, and winopts defaults are never consumed. lua/busted.lua installs global describe, it, pending, before_each, after_each, clear, and assert, loads specs with loadfile, and exits through :cq. It records suite-level exceptions separately, but failed test bodies all enter results.fail. lua/luassert/ contains the vendored assertion, spy, mock, stub, matcher, array, utility, and state machinery; lua/say.lua supplies namespaced messages.
Observed
- License
- MIT License
- Primary language
- Lua, configured for a LuaJIT runtime
- Interface
- Neovim Lua module that launches headless Neovim child processes
- Test discovery
- Recursively finds files whose names end with _spec.lua
- Bundling
- Vendors luassert and say; the harness is forked from plenary.test_harness
- Supported context
- Requires Neovim APIs and is explicitly marked not for public use
Read from README.md, LICENSE, .luarc.json, .stylua.toml, lua/say.lua, lua/busted.lua, lua/plentest.lua, lua/luassert/spy.lua, lua/luassert/init.lua, lua/luassert/mock.lua, lua/luassert/stub.lua, lua/luassert/util.lua, lua/luassert/array.lua, lua/luassert/match.lua, lua/luassert/state.lua.
What it can do
Run busted-style tests
Test files with busted syntax → Test execution results
Execute plugin tests
Neovim plugin test suites → Pass/fail status and test reports
Provide drop-in test running
Existing test configurations → Compatible test execution without setup changes
Generate test output reports
Test execution data → Formatted test results and statistics
Validate plugin functionality
Plugin code and test specifications → Verification of plugin behavior correctness
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.