Write unit and fuzz tests for your Elm code, in Elm.
Here are three example tests:
suite : Test
suite =
describe "The String module"
[ describe "String.reverse" -- Nest as many descriptions as you like.
[ test "has no effect on a palindrome" <|
\() ->
let
palindrome =
"hannah"
in
Expect.equal palindrome (String.reverse palindrome)
-- Expect.equal is designed to be used in pipeline style, like this.
, test "reverses a known string" <|
\() ->
"ABCDEFG"
|> String.reverse
|> Expect.equal "GFEDCBA"
-- fuzz runs the test 100 times with randomly-generated inputs!
, fuzz string "restores the original string if you run it again" <|
\randomlyGeneratedString ->
randomlyGeneratedString
|> String.reverse
|> String.reverse
|> Expect.equal randomlyGeneratedString
]
]This code uses a few common functions:
describe to add a description string to a list of teststest to write a unit testExpect to determine if a test should pass or failfuzz to run a function that produces a test several times with randomly-generated inputsCheck out a large real-world test suite for more.
There are several ways you can run tests locally:
npm install -g elm-testHere's how to set up and run your tests using the CLI test runner:
npm install -g elm-test if you haven't already.cd into the project's root directory that has your elm-package.json.elm-test init. It will create a tests directory inside this one,
with some files in it.elm-package.json into
tests/elm-package.json. These dependencies need to stay in sync, so make
sure whenever you change your dependencies in your current
elm-package.json, you make the same change to tests/elm-package.json.elm-test.tests/Tests.elm to introduce new tests.Here are some examples of running tests on CI servers:
elm-test is designed to test functions, not effects. To test them, use elm-testable. For integration or end-to-end testing, use your favorite PhantomJS or Selenium webdriver, such as Capybara.legacy-elm-test provides a
drop-in replacement for the ElmTest 1.0 API, except implemented in terms of
the current elm-test. It also includes support for elm-check tests.
This lets you use the latest test runners right now, and upgrade incrementally.
| Version | Notes |
|---|---|
| 2.1.0 | Switch to rose trees for Fuzz.andThen, other API additions. |
| 2.0.0 | Scratch-rewrite to project-fuzzball |
| 1.0.0 | ElmTest initial release |