Skip to content

A library for fuzz testing TEA models by simulating user interactions

License

Notifications You must be signed in to change notification settings

Janiczek/architecture-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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!

  • 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.

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

About

A library for fuzz testing TEA models by simulating user interactions

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages