tl;dr: Fuzz-test your update
function with random List Msg
s!
(Click on the diagram below for full size!)
To do this, you create a Msg
fuzzer (and possibly a Model
fuzzer) and plug it in test functions exposed here!
- Here are example Models with test suites showing how to write these kinds of tests.
- Richard Feldman has a simpler library
rtfeldman/test-update
with the same purpose - give it a look! - A talk about this topic was presented at Elm Europe 2017.
- For more discussion, see this issue of elm-test.
No, it cannot (as of version 0.18). You will have to specify your Msg fuzzers by hand:
cancel : Fuzzer Msg
cancel =
Fuzz.constant Cancel
addCoins : Fuzzer Msg
addCoins =
Fuzz.intRange 0 Random.maxInt
|> Fuzz.map AddCoins
-- some other Msg fuzzers... and then, combine them:
allMsgs : Fuzzer Msg
allMsgs =
Fuzz.oneOf
[ cancel
, addCoins
, buy
, takeProduct
]
Right, so Fuzz.oneOf
gives all the options the same probability of being chosen. It internally uses Fuzz.frequency
, which you can use too and specify your own probabilities!
preferAdding : Fuzzer Msg
preferAdding =
Fuzz.frequency
[ (1, cancel)
, (10, addCoins)
, (1, buy)
, (1, takeProduct)
]