To run tests, you'll need to install the Exosphere development dependencies:
npm install
You can use the elm-test README as a way to orient to structure of tests:
https://github.com/elm-community/elm-test#quick-start
Exploring one example might be helpful in pointing out some of the intending structure.
-- simple test suites need to import the following:
import Expect exposing (Expectation)
import Test exposing (..)
testPalindrome : Test
testPalindrome =
test "has no effect on a palindrome" <|
\() ->
let
palindrome =
"hannah"
in
Expect.equal palindrome (String.reverse palindrome)
The String
passing to test
function is used to provide "output" for when there is a failure. It is common to use of the left pipeline operator, <|
, as it avoids having to wrap the anonymous function in parentheses. The use of ()
(aka "Unit") is meant to flag, or "signal" (a person waving to you), that nothing will be done with this argument.
If you explore other projects for examples of tests, you will see that some use "the hockey stick", _, for the anonymous function. There are individuals that argue this is supposed to be "less clear" since you're accepting an argument, and that argument for a Test
will be disregarded or ignored.
You can group together tests and example their functions using describe
.
testPalindromes : Test
testPalindromes =
describe "the overall test suite"
[ describe "simple palindrome cases without spaces"
[ test "has no effect on a palindrome" <|
\() ->
let
palindrome =
"hannah"
in
Expect.equal palindrome (String.reverse palindrome)
]
, describe "palindromed cases where spaces must be never"
[ test "has no effect on a palindrome" <|
\() ->
let
normalize s =
String.split " " s |> String.join ""
palindrome =
"was it a rat i saw"
in
palindrome
|> normalize
|> Expect.equal (String.reverse (normalize palindrome))
]
]