The tasty-discover package

[Tags:library, mit, program, test]

Automatic test discovery and runner for the tasty framework. Prefix your test case names and tasty-discover will discover, collect and run them. All popular test libraries are covered. Configure once and then just write your tests. Avoid forgetting to add test modules to your Cabal/Hpack files. Tasty ingredients are included along with various configuration options for different use cases. Please see the below for how to get started.

[Skip to Readme]


Versions 1.0.0, 1.0.1, 1.1.0, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 3.0.0, 3.0.1, 3.0.2
Change log
Dependencies base (>=4.8 && <5.0), containers (>=0.4 && <1.0), directory (>=1.1 && <2.0), filepath (>=1.3 && <2.0), tasty-discover [details]
License MIT
Copyright 2016 Luke Murphy
Author Luke Murphy
Maintainer Luke Murphy <>
Category Testing
Home page
Bug tracker
Source repository head: git clone
Uploaded Sun Jun 4 08:21:09 UTC 2017 by lwm
Distributions LTSHaskell:3.0.2, NixOS:3.0.2, Stackage:3.0.2, Tumbleweed:1.1.0
Downloads 469 total (61 in the last 30 days)
0 []
Status Docs available [build log]
Last success reported on 2017-06-04 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for tasty-discover

Readme for tasty-discover-3.0.2

Build Status Hackage Status tasty-discover GitHub license


Automatic test discovery and runner for the tasty framework.

Getting Started

5 steps to tasty test discovery satori:

  • Create a Tasty.hs in the hs-source-dirs of your test suite.
  • Set your test suite main-is to the Tasty.hs.
  • Create test modules in files with suffix *Test.hs or *Spec.hs.
  • Write your tests with the following prefixes:


{-# LANGUAGE ScopedTypeVariables #-}

module ExampleTest where

import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.Hspec
import Test.Tasty.QuickCheck

-- HUnit test case
unit_listCompare :: IO ()
unit_listCompare = [1, 2, 3] `compare` [1,2] @?= GT

-- QuickCheck property
prop_additionCommutative :: Int -> Int -> Bool
prop_additionCommutative a b = a + b == b + a

-- SmallSheck property
scprop_sortReverse :: [Int] -> Bool
scprop_sortReverse list = sort list == sort (reverse list)

-- Hspec specification
spec_prelude :: Spec
spec_prelude = do
  describe "Prelude.head" $ do
    it "returns the first element of a list" $ do
      head [23 ..] `shouldBe` (23 :: Int)

-- Tasty TestTree
test_multiplication :: [TestTree]
test_multiplication = [testProperty "One is identity" $ \(a :: Int) -> a * 1 == a]

-- Tasty IO TestTree
test_generateTree :: IO TestTree
test_generateTree = do
  input <- pure "Some input"
  pure $ testCase input $ pure ()

-- Tasty IO [TestTree]
test_generateTrees :: IO [TestTree]
test_generateTrees = do
  inputs <- pure ["First input", "Second input"]
  pure $ map (\s -> testCase s $ pure ()) inputs


Pass configuration options within your Tasty.hs like so:

 OPTIONS_GHC -F -pgmF tasty-discover
 -optF <OPTION>
 -optF <OPTION>
 -- etc.

No Arguments

Example: {-# OPTIONS_GHC -F -pgmF tasty-discover -optF --debug #-}

  • --no-module-suffix: Collect all test modules, regardless of module suffix.
  • --debug: Output the contents of the generated module while testing.
  • --tree-display: Display the test output results hierarchically.

With Arguments

Example: {-# OPTIONS_GHC -F -pgmF tasty-discover -optF --module-suffix=FooBar #-}

  • --module-suffix: Which test module suffix you wish to have discovered.
  • --generated-module: The name of the generated test module.
  • --ignore-module: Which test modules to ignore from discovery.
  • --ingredient: Tasty ingredients to add to your test runner.

Change Log

See the change log for the latest changes.


All contributions welcome!


Thanks to hspec-discover and tasty-auto for making this possible.