Notable changes to this project will be documented in this file.
The format is based on Keep a Changelog. This project mirrors the Elm version. So version 0.19.1-revisionX of this project will be compatible with Elm 0.19.1.
elm-test --report junit
now works with elm-program-test. Thejunit
report is XML.elm-program-test
uses some characters that are not allowed in XML. This version replaces such disallowed characters with an Elm-style escape sequence, instead of crashing like it did before. Thanks to Christoph Hermann for reporting and to Ilias Van Peer for fixing!
elm-test init
now prints a working link to theelm-explorations/test
package. Thanks to Max Strübing!- If you ever saw
RuntimeError: unreachable
when trying to useelm-test
, that should not be possible to happen anymore. elm-test now depends on the latest version ofelm-solve-deps-wasm
which solved that problem. (Previously, you had to make sure you had that version installed yourself).
-
This version of
elm-test
only works with elm-explorations/test 2.x (2.0.0 <= v < 3.0.0), which was just released. The versions table should make it clear which versions work together. -
Removed
elm-test install-unstable-test-master
andelm-test uninstall-unstable-test-master
. They are no longer needed since elm-explorations/test 2.0.0 has been released.
-
Fuzzer distribution statistics report. Fuzzer distribution is new in elm-explorations/test 2.0.0, and it required a change in how things are reported from Elm to the test runner, which is why elm-test 0.19.1-revision10 is not compatible with older elm-explorations/test versions.
-
The
--no-clear-console
flag. By default,elm-test --watch
clears the screen on every re-run, so you only see up-to-date output. With--no-clear-console
, the console is not cleared and a separator is instead printed between the old and new output instead (similar to how elm-test-rs works). This is useful if you are running several commands in the same terminal and don’t wantelm-test --watch
to clear away output from other commands.
elm-test install-unstable-test-master
(added in the previous version) now works with packages.
- Removed support for Node.js 10 (which reached end of life 2021-04-30). Node.js 12.20.0 is now the minimum supported Node.js version. (Node.js 12 actually reached end of life 2022-04-30, but we decided to keep support for it for a while longer since there was no need of dropping it right now.)
elm-test install-unstable-test-master
- which installs the
master
version of theelm-explorations/test
library in place of the1.2.2
version in yourELM_HOME
- which installs the
elm-test uninstall-unstable-test-master
- which undoes that
This let’s you test the upcoming major version of elm-explorations/test. Big thanks to Martin Janiczek!
-
elm-test no longer uses elm-json to calculate the set of dependencies needed to run your tests. Instead, we use elm-solve-deps-wasm which basically is a WebAssembly port of the dependency solver in elm-test-rs. Big thanks to Matthieu Pizenberg! Benefits of this change:
- elm-test no longer needs to download the elm-json binary at install time or run time. elm-solve-deps-wasm is a regular, cross platform npm package.
- Improves compatibility with Lamdera.
- elm-solve-deps-wasm works offline to a greater extent than elm-json. Many times it doesn’t need to make any calls to package.elm-lang.org at all!
-
elm-test now shows suggestions on misspelled CLI flags.
- If you have
module MyTest exposing (..)
with the expose-all(..)
and a char literal with a unicode escape, like'\u{000D}'
, in the same file, elm-test now correctly finds all tests to run in that file. A bug with unicode escape parsing previously caused no tests to be found.
- elm-test now works if you have
{ "type": "module" }
in your package.json. --output=/dev/null
is now ignored. This is needed by Emacs’ flycheck-elm package, which calls bothelm make
andelm-test make
with--output=/dev/null
.elm-test make
does not produce any output files, so the flag doesn’t change anything. (Before 0.19.1-revision5, all unknown flags were silently ignored.)- The “no tests found” error message now works with
--report=json
and--report=junit
again (regression in 0.19.1-revision5). - Better error message for
--fuzz=0
.
- The
--no-color
and--color
flags (to disable and force colors) now work again (regression in 0.19.1-revision5). --no-color
now turns off colors in Elm compiler error messages as well.
- Removed support for Node.js 8 (which reached end of life 2019-12-31). Node.js 10.13.0 is now the minimum supported Node.js version.
- Removed the undocumented
--verbose
flag. It didn’t do much at all in its current state.
- Now works on Apple Silicon/M1/ARM MacBooks. Installation used to fail with “Error: No binaries are available for your platform: darwin-arm64.”
- You can now run your test from a subdirectory.
elm-test
finds yourelm.json
up the directory tree instead of printing an error. - If you had a port named
send
orreceive
and they were reached via test cases,elm-test
used to fail with a duplicate port error.elm-test
has renamed its internal ports so that conflicts are very unlikely. - The JUnit reporter now says
@failures
instead of@failed
which makes Jenkins happier. elm-test
now errors on unknown (misspelled) flags instead of silently ignoring them.elm-test
now errors on bad--fuzz
and--seed
values instead of silently ignoring them.- A whole host of Elm package dependencies errors, by using
elm-json
to calculate the set of dependencies needed to run your tests. elm-test --watch
no longer crashes if for packages if there are compilation errors insrc/
at startup.elm-test --watch
now detects changes in yourelm.json
.elm-test --watch
now works better when lots of files change at once. If 10 files changed, your tests used to run 10 times in sequence (more or less). Now, they only run once or twice. Changes within 100 ms are batched together. Changes happening while the tests are running no longer queue up – they instead trigger one single test once the current run is done.- Compilation errors are no longer hidden by a super long “Compilation failed while attempting to build [absolute paths to every single test Elm file]” message.
- A bunch of checks and validations have been added to help in edge cases.
elm-test
is now faster to install (by having fewer dependencies). It used to be around 18 MB, now it’s just 2 MB.elm-test
now runs about half a second faster, by no longer usingelmi-to-json
. (As a bonus, if you ever encountered errors mentioningelmi-to-json
, that won’t happen anymore.)elm-test --watch
now reruns your tests sooner after file changes (about 100 ms after the changes, instead of about 500 ms).
- The
--help
output is now more conventional and hopefully easier to read.
- The
--compiler
command line flag now correctly finds elm executables on your PATH (see #438). - We have hugely slimmed down the reproduction instructions so that the test runner no longer prints hundreds of test file paths to the console (see issue #431 and fix #432).
- A whole host of spring cleaning that streamlines the test runner. (see #425).
- Update elmi-to-json and use
--for-elm-test
to optimise collection of tests (#396).
- drop support for elm 0.19.0
elm-test --help
now exits with code0
.
elm-test
supports elm 0.19.1.- Node 12.
npm audit
complaints on versions of chokidar and node-elm-compiler
- Excessive small highlights in some diffs (#263)
- Upgraded to a version of lodash with a vulnerability fixed.
elm-test install PACKAGE
- works likeelm install
but installs intotest-dependencies
--add-dependencies
(replaced byelm-test install
)- CLI aliases (e.g.
-f
as a shorthand for--fuzz
).
- Low-contrast diff color (#229)
- Socket write edge case (#228)
- Invalid JUnit XML (#218)
- Potentially fixed: elm-test hanging
- Run tests in parallel (#45)
--watch
error reporting (#192)--watch
potential extra compile processes (#194)
- More accurate timetracking
- Use symlinks to improve generated code performance
- Use Elm instead of Chalk for colored console output
- Use Prettier
- All reporters were considered "machine readable", resulting in the error stream being ignored (#161)
- We have a changelog! (#151)
- Proper error messages when username or repository name contains dots (#166)
- Add flow type annotations to prevent silly JS mistakes! (#162)
- Imports in the
Example.elm
file are now sorted for compatibility withelm-format@exp
--report
flag broken (#155)
- If your project depends on
elm-lang/html
,elm-test init
will add a dependency toeeue56/elm-html-test
so you can test your HTML. (#154)
- Runner no longer fails when CWD has spaces in it (#147)
- Tests that are
port modules
oreffect modules
are no longer rejected (#143)
--add-dependencies target/elm-package.json
flag to add any missing dependencies from theelm-package.json
file in the current director to thetarget/elm-package.json
file. (#28)Test.todo
to mark tests as not yet implemented. (#104)--fuzz
flag to override the default fuzz count. (#77)Test.only
andTest.skip
to limit which tests will be executed.
elm-test init
now adds all dependencies from the packageelm-package.json
to the generatedtests/elm-package.json
file. (#68)- You no longer write a
tests/Main.elm
file. Rather, you pass the paths to your tests to theelm-test
executable to run just those files, or you runelm-test
without arguments which will look for all elm files undertests/
andtest/
. (#72) - All exposed values of type
Test
are executed by the test-runner. - Duplicate titles/descriptions fail the test run. (#115)
- Empty describes are no longer allowed. (#95)
- Ignores
elm-stuff
(#100) - Tests that throw a runtime exception fail with the exception message as failure, rather than crashing the runner. (#69)
- Upgrade the runner
npm i -g elm-test
- Remove
tests/Main.elm
- Remove the dependency on
rtfeldman/node-test-runner
fromtests/elm-package.json
- Bump the dependency on
elm-community/elm-test
to4.2.0 <= v < 5.0.0
intests/elm-package.json
- Ensure your test files expose each test you want to run, and that those values are of type
Test
- Make sure those tests aren't defined twice (for example: once as a top-level value, and again in a
describe
block) or they will be executed twice. - run
elm-test
to execute your tests.