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
Change log
Dependencies base (>=4.8 && <5), directory (>=1.1 && <1.4), filepath (>=1.3 && <1.5), 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 Thu Apr 13 12:43:42 UTC 2017 by lwm
Distributions LTSHaskell:1.1.0, NixOS:2.0.3, Stackage:2.0.3, Tumbleweed:1.1.0
Downloads 196 total (76 in the last 30 days)
0 []
Status Docs available [build log]
Last success reported on 2017-04-13 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees

Readme for tasty-discover

Readme for tasty-discover-2.0.3

Build Status Hackage Status Stackage Status GitHub license


Automatic test discovery and runner for the tasty framework.

Getting Started

Usage GIF

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
case_listCompare :: IO ()
case_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>

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.

With Arguments

Example: {-# OPTIONS_GHC -F -pgmF tasty-discover -optF --moduleSuffix=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.