运行 堆栈中测试套件的惯用方式

Idiomatic way to run test-suites in stack

Haskell这里是初学者。

我正在努力寻找一种很好的方法来 运行 我在 .cabal 文件中定义的测试套件。鉴于您在 .cabal 文件中添加了 test-suite 部分,我希望您可以 运行 使用单个命令(如 stack runtests.

所有这些部分

我找到的最佳答案是这个: 提示你必须运行

stack ghci --test module:test:libtests

但是,有两件事让我很恼火,我认为一定有更好的方法。

  1. 显式调用stack ghci --test module:test:libtests很麻烦。如果当项目变大时我有更多的测试套件,我不想这样做。
  2. 更糟糕的是,我最终进入了交互式会话,不得不自己打电话给 main。这不会缩放。

没有更好的方法来 运行 堆栈中项目的测试套件吗?当然我可以做一些 shell 脚本,但是嘿堆栈应该 知道 如何 运行 我的测试,我在 .cabal 文件中指定了所有内容。

我试过 stack runghc --test 但没有用。

项目设置:

.
├── app
│   └── Main.hs
├── LICENSE
├── README.md
├── Setup.hs
├── src
│   ├── Lib.hs
│   └── WordNumber.hs
├── stack.yaml
├── test
│   └── Spec.hs
└── WordNumber.cabal

WordNumber.cabal

name:                WordNumber
version:             0.1.0.0
-- synopsis:
-- description:
homepage:            https://github.com/githubuser/WordNumber#readme
license:             BSD3
license-file:        LICENSE
author:              Author name here
maintainer:          example@example.com
copyright:           2017 Author name here
category:            Web
build-type:          Simple
extra-source-files:  README.md
cabal-version:       >=1.10

library
  hs-source-dirs:      src
  exposed-modules:     Lib, WordNumber
  build-depends:       base >= 4.7 && < 5
  default-language:    Haskell2010

executable wordnumber
  hs-source-dirs:      app
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  build-depends:       base
                     , WordNumber
  default-language:    Haskell2010

test-suite wordnumber-test
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Spec.hs
  build-depends:       base
                     , WordNumber
                     , hspec
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  default-language:    Haskell2010

更新: 其实我觉得自己没有找到答案有点愚蠢。它是 stack teststack build --test 并且也有记录。

但是,对于关注 Haskell本书的人来说,这可能并不那么明显。由于某种原因,测试章节中的所有测试都以繁琐的方式执行,并且从未提及使用 stack test 进行的 运行ning 测试。

stack test 运行位于 .cabal 文件中的测试。如果需要,它会运行 stack build,因此您无需在测试前手动构建。

进一步了解:https://docs.haskellstack.org/en/stable/GUIDE/#stack-test