4

私は次のアーキテクチャを持っています:

  backend
  ├── Chat.hs
  ├── Main.hs
  └── Message.hs
  test
  ├── backendSpec
  │   └── MessageSpec.hs
  └── Spec.hs

私の .cabal ファイルには次のものが含まれています

test-suite spec
  build-depends:  base, hspec == 2.*,
                  snap >= 0.14.0.6,
                  containers,
                  aeson,
                  text,
                  transformers,
                  stm,
                  snap-core,
                  snap-server,
                  socket-io,
                  engine-io-snap,
                  snap-cors,
                  bytestring
  hs-source-dirs: test
  main-is: Spec.hs
  Type: exitcode-stdio-1.0

しかし、私がするとき

stack test

HSpec がテスト int MessageSpec.hs を見つけられません。

0.0002 秒で終了 0 例、0 失敗

Spec.hs は正しい入力です: {-# OPTIONS_GHC -F -pgmF hspec-discover #-}

私のMessageSpecモジュールは公開しています:モジュールMessageSpec(メイン、スペック)。

すべてのテストを実行するスタック プロジェクトを作成する方法を見つけるのを手伝ってくれませんか。

ありがとうございました、

4

1 に答える 1

3

仕様へのパスは、モジュール名の規則に従う必要があります。backendSpec.MessageSpecは小文字で始まるため、有効なモジュール名ではありません。

さらに、仕様のモジュール名は、Spec元のモジュールとの追加の接尾辞だけが異なる必要があります。あなたのモジュールはbackendSpecこれに従わないでしょう:

module Message where ...
-- vs
module BackendSpec.MessageSpec where ...

したがって、これを修正するには、ディレクトリ内のすべてのディレクトリがtest大文字で始まることを確認してください。ただし、さらに良いことに、テスト ディレクトリがディレクトリと同じ構造であることを確認してください。srcこれにより、テスト中により良いモジュール名が得られます。

-- If file is test/BackendSpec/MessageSpec.hs
BackendSpec.Message:
   <someDescription>
      <some assertion>
      <some assertion>
      <some assertion>

-- If file is test/MessageSpec.hs
Message:
   <someDescription>
      <some assertion>
      <some assertion>
      <some assertion>

(この動作に関連するコードはhspec/Run.hsofにありますhspec-discover)

于 2016-01-26T06:47:37.207 に答える