Janiczek/architecture-test - version: 2.1.2

for more information visit the package's GitHub page

Package contains the following modules:

ArchitectureTest

Terminal screencast of usage

tl;dr: Fuzz-test your update function with random List Msgs!

(Click on the diagram below for full size!)

High-level diagram

To do this, you create a Msg fuzzer (and possibly a Model fuzzer) and plug it in test functions exposed here!


FAQ

Can Elm enumerate over your Msg type automatically?

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
        ]

How can I focus my Msgs (prefer some of them more than others?)

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)
        ]