Changelog
View SourceAll notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
v6.0.0 - 2026-10-05
💥 BREAKING CHANGES 💥
- In this release, we eliminate interactions between commands. Previously, you
could only have one of the
(s)tale,(f)ailed, or(p)atternoptions enabled at the same time. We now eliminate that restriction, so you can now run all stale tests matching a filename pattern, for example. Note thatmix testitself currently does not allow--failedand--staleto be provided together, but we don't implement that restriction inmix test.interactive. Instead, we allowmix testto report the issue itself. (#155, #158, #159) - The
(a)ll testscommand now also clears any(i)nclude,e(x)clude, or(o)nlytags in addition to clearing the(s)tale,(f)ailed, and(p)atternoptions. (#155) - We change how we process the arguments to interactive commands. In order to properly support filename patterns, tags, and name patterns that might have embedded spaces or other special characters, we now respect quoting of the arguments using single- or double-quotes, or backslash escapes before whitespace characters. While this is an improvement in functionality, it is a change to how argument parsing used to work. (#162)
- We are now strict about the number of arguments passed to the various commands. Previously, some commands would accept any number of arguments while others would crash and restart the interactive loop when given the wrong number of arguments. We now report an error when any command is given an incorrect number of arguments and no longer crash. (#163)
- We remove most of the modules from the public API, leaving only the mix task,
the
TestRunnerbehaviour and theConfigstruct that is used by that behaviour. This library is primarily intended as a mix task and there should be no need to interact with its internals. (#164) - This release drops support for Elixir 1.14 and 1.15. We officially support the same versions as Elixir itself, so support for Elixir 1.14 and 1.15 is no longer provided. (#156)
Updated
- (Elixir 1.19 and above) We now support and allow adjustments to the new
-n/--name-patternoption tomix test. You can specify a name pattern on the command line when startingmix test.interactive. You can later use then <name pattern>command to specify or change the name pattern or thencommand to clear the name pattern. Name patterns allow you to run only tests whose names match the pattern. These are similar to the filename patterns we already supported (via thepcommand), which do the same kind of matching on test filenames. We update the API and documentation to better distinguish between filename patterns and (test) name patterns. (#160, #161) - We now recognize the
--max-requires(Elixir 1.18 and later) and--dry-run(Elixir 1.19 and later) command-line options and pass them along tomix teston every test run. We do not support managing them viamix test.interactivecommands, however. (#157) - We now allow the
--failedor--staleoptions to co-exist with filename patterns as well as name patterns and tags. See above for more details. (#155, #158, #159) - The
(a)ll testscommand now also clears any(i)nclude,e(x)clude, or(o)nlytags in addition to clearing the(s)tale,(f)ailed, and(p)atternoptions. (#155) - We now respect quoting of command arguments using single- or double-quotes, or backslash escapes before whitespace characters. See above for more details. (#162)
Bug Fixes
- We no longer crash when additional arguments are passed to commands which only allow a single argument. See above for more details. (#163)
v5.2.0 - 2026-09-30
Updated
- We now allow relative pathnames (e.g.
./test/foo_test.exs) as patterns, both on the command-line and passed to thepcommand. This more closely matchesmix test's behavior. (#143 - Thanks @pauldemarco for the suggestion!) - Update hexdocs link to use new per-package subdomains. (#150)
v5.1.0 - 2025-12-29
Updated
- Loosen the version spec on
process_tree. We now allow for any version > v0.1.3. (#147)
v5.0.0 - 2025-06-09
💥 BREAKING CHANGE 💥
- This release drops support for Elixir 1.13. We officially support the same versions as Elixir itself, so support for Elixir 1.13 is no longer provided. (#137)
There are no actual breaking changes in the code itself, so as long as you're on Elixir 1.14 or later, you should have no problems upgrading to this version.
Updated
We address new deprecations and compiler warnings in Elixir 1.19. There are no user-visible changes. (#137 - Thanks @frankdugan3 for contributing to the fixes!)
We upgrade to the newest version of
ex_docsto get the latest improvements. (#137)
v4.3.0 - 2025-03-21
Added
- Add a new
verboseconfiguration setting and command-line option, disabled by default. When enabled,mix test.interactivewill print the command it is about to run just before running the tests. (#135)
v4.2.0 - 2025-03-19
Fixed
On Unix-like system we no longer start the client application prematurely. Previously, we'd run (essentially)
mix do run -e 'Application.put_env(:elixir, :ansi_enabled, true)', testin order to enable ANSI control codes/colors when running tests. However,mix runby default starts the application. Normally this would be fine, but in some cases it can cause problems. We now usemix do eval 'Application.put_env(:elixir, :ansi_enabled, true)', testinstead, which delays starting the application until themix testtask runs. (#132)Properly handle the
--no-startoption tomix teston Unix-like systems. Previously, we were using that option for themix run -ecommand we were using to enable ANSI output, but not passing it through tomix testitself. (#132)
Added
- We make the use of ANSI control code output configurable by adding the
--(no-)ansi-enabledcommand-line option andansi_enabledconfiguration setting. Previously, we'd enable ANSI output automatically on Unix-like systems and not on Windows. This is still the default, but now Windows users can opt into ANSI output. Since Windows 10, ANSI support has been available if the appropriate registry key is set. Additional, users on Unix-like systems can opt out of ANSI output if desired. (#133)
v4.1.2 - 2024-12-14
Updated
Update README with instructions for running
mix test.interactiveas an independent script that doesn't require installing as a dependency in your application. (#127 - Thanks @andyl!)Allow process_tree versions v0.1.3 and v0.2.0 to provide more flexibility for upstream projects (#128)
v4.1.1 - 2024-09-28
Fixed
- Properly handle
mix test.interactive <files_or_patterns...>case. The new command-line parsing added in v4.0 was not properly capturing the filenames/patterns and passing them on tomix test. (#123 - Thanks @jfpedroza for finding and reporting the bug!)
v4.1.0 - 2024-09-21
Added
This version adds a number of new commands for controlling additional
mix testoptions interactively:d <seed>/d: Set or clear the seed to use when running tests (mix test --seed <seed>). (#112)i <tags...>/i: Set or clear tags to include (mix test --include <tag1> --include <tag2>...). (#113)o <tags...>/o: Set or clear "only" tags (mix test --only <tag1> --only <tag2>...). (#113)x <tags...>/x: Set or clear tags to exclude (mix test --exclude <tag1> --exclude <tag2>...). (#113)m <max>/m: Set or clear the maximum number of failures to allow (mix test --max-failures <max>). (#116)r <count>//r: Set or clear the maximum number of repeated runs until a test failure (mix test --repeat-until-failure <count>). NOTE:mix testonly supports this option in v1.17.0 and later. (#118)t: Toggle test tracing on/off (mix test --trace). (#117)
There is now a
MixTestInteractive.TestRunnerbehaviour for use in custom test runners. Up until now, custom test runners needed to implement a singlerun/2function. This release adds a behaviour that custom test runners can implement to ensure that they've correctly conformed to the interface. Custom test runners don't have to explicitly implement the behaviour, but must implicitly do so as before. (#115)
v4.0.0 - 2024-09-13
💥 BREAKING CHANGE 💥
This version introduces the option of "config-less" operation. All configuration settings can now be supplied on the command-line instead. To avoid confusion and clashes with mix test's command-line options, it is now necessary to separate mix test.interactive's options from mix test's options with -- separator.
For example, to use the new --clear option as well as mix test's --stale option, it is necessary to use:
mix test.interactive --clear -- --stale
This affects two of the command-line options that were available in previous versions:
mix test.interactive's--no-watchflag. Previously, you could run (for example)mix test.interactive --no-watch --stale. This will no longer work. You must now usemix test.interactive --no-watch -- --staleinstead.mix test's--excludeoption.mix test.interactivenow has its own--excludeoption. Previously, you could run (for example)mix test.interactive --exclude some_test_tagand that argument would be forwarded on tomix test. Now you must usemix test.interactive -- --exclude some_test_taginstead.
If you don't use either of these two options, everything should work as before.
To upgrade to this version, you'll need to update any mix aliases or other scripts you may have defined for mix test.interactive. In addition, you and everyone who works in your codebase will need to update any shell aliases they have defined.
Added
- This version introduces the option of "config-less" operation. All configuration settings can now be supplied on the command-line instead. See the README or run
mix help test.interactivefor more information. Also, see the💥 BREAKING CHANGE 💥section above. (#108)
Changed
- The
Running tests...message thatmix test.interactivedisplays before each test run is displayed in color. This makes it easier to find the most recent test run when scrolling back in your shell. (#109)
v3.2.1 - 2024-09-07
Fixed
- Fixed handling of custom
command/argson Unix-like systems.mix_test_interactivewas not correctly ordering the various arguments. (#105 - Thanks @callmiy!)
v3.2.0 - 2024-08-24
Changed
- Made pattern matching more flexible. Previously, when given multiple patterns, we would not do any file filtering if any of the patterns was a
file:line-style pattern. Instead, we'd pass all of the patterns tomix testliterally. Now, we run normal file filtering for any non-file:line-style patterns and concatenate the results with anyfile:line-style patterns. (#99) - Added documentation for missing configuration options in the mix task's module documentation. (#100)
v3.1.0 - 2024-08-24
Added
- Add a new
commandconfiguration option that allows use of a custom command instead ofmixfor running tests. See the README for more details. (#96)
Changed
- Added documentation for missing configuration options in the README. (#96)
v3.0.0 - 2024-07-13
💥 BREAKING CHANGE 💥
- This release drops support for Elixir 1.12. We officially support the same versions as Elixir itself, so support for Elixir 1.12. (#94)
There are no actual breaking changes in the code itself, so as long as you're on Elixir 1.13 or later, you should have no problems upgrading to this version.
Changed
- Update to the latest version of ex_doc. The documentation reflects these changes. (#93)
v2.1.0 - 2024-07-13
Fixed
- Fix compiler warnings on Elixir 1.17. (#89 - Thanks @jfpedroza!)
v2.0.4 - 2024-03-04
Fixed
- Ignore some filesystem events emitted by inotify. Some events are triggered later than others and end up causing the tests to run twice for a single file change. (#86 - Thanks @jwilger!)
v2.0.3 - 2024-01-27
Changed
- Update
file_systemdependency to allow versions 0.2 and 1.0 to avoid dependency conflicts with popular libraries likephoenix_live_reload. Previously, we'd specified v0.3, but there is no such version offile_system. (#83)
v2.0.2 - 2024-01-25
Changed
- Allow
file_systemversions 0.3 and 1.0 to avoid dependency conflicts with popular libraries likephoenix_live_reload. (#81)
v2.0.1 - 2024-01-25
Fixed
- Make the
stylerdependency a dev-only dependency to avoid pulling it into client projects with a potential version conflict. (#79)
v2.0.0 - 2024-01-22
💥 BREAKING CHANGES 💥
- This release drops support for older Elixir versions. We officially support the same versions as Elixir itself, so support for Elixir 1.11 and prior has been dropped. (#67, #75)
- Upgrade file_system dependency to version 1.0. This appears to be a simple bump to 1.0 with no breaking changes, so should be safe to upgrade to. It might break dependency resolution if you're locked to a pre-1.0 version, so it's noted here. (#72 - Thanks @andyl!)
There are no actual breaking changes, so as long as you're on Elixir 1.12 or
later and aren't depending on a pre-1.0 version of file_system, you should
have no problems upgrading to this version.
Added
Add full task documentation.
mix help test.interactivewill now show a summary of usage and configuration information (#70)
v1.2.2 - 2022-11-15
No functional changes; purely administrative.
Changed
- Migrated repository ownership from @influxdata to @randycoulman (#60)
v1.2.1 - 2022-06-01
Fixed
- Include .heex in list of watched file extensions (#57 - Thanks @juddey!)
v1.2.0 - 2022-04-07
Changed
Documentation
Include proper source ref in the generated documentation so that it now points at the correct version of the source code. (#51 - Thanks @kianmeng!)
Include license and changelog in generated documentation. (#51 - Thanks @kianmeng!)
v1.1.0 - 2021-10-08
Fixed
- The
p(pattern) command now works properly in umbrella projects. Previously, it was unable to find any test files in order to filter the pattern and would therefore not run any tests. Now, in an umbrella project,mix test.interactivelooks for test files inapps/*/testby default, but still respects the:test_pathsconfig option used bymix test. (#48)
Documentation
- Fixed the spelling of Louis Pilfold's name in the README. Sorry, Louis! 🤦♂️ (#49)
v1.0.1 - 2021-03-09
Fixed
- Eliminates a GenServer call timeout that can occur if a command is typed while a long-running test run is in progress. (#44).
v1.0.0 - 2021-02-18
🎉 Happy Birthday!
The following sections describe changes from mix-test.watch, which served as the basis of this project.
Added
Interactive mode allows dynamically filtering test files based on a substring pattern or switching to run only failed or stale tests without having to restart.
File-watching mode can be turned on and off, either by passing
--no-watchon the command line, or by using thewcommand to dynamically toggle watch mode on and off. When file-watching mode is on, tests will be run in response to file changes as withmix-test.watch. When off, tests must be run explicitly using theEnterkey or by using another command that changes the set of tests to be run.
Removed
It is no longer possible to customize the CLI executable. We always use
mix. Previously, this allowed the use ofiex -S mixinstead, but that doesn't work well with interactive mode.It is no longer possible to specify multiple tasks to run on file changes. This ability added complexity and the feature didn't work very well because it assumed that all tasks would take the exact same set of command-line arguments. It is still possible to specify a different task name than
test, butmix test.interactiveassumes that the custom task accepts the same command-line arguments asmix test.
Fixed
- On Windows,
mix test.interactiveruns the correctmixtask, including a custom task provided in the configuration, rather than always runningmix test. It also passes along other provided command-line arguments as well as those injected bymix test.interactive.