stack runghc에서 테스트 실행
src/FooImpl.hs
module FooImpl where
foo :: Foo -> Bar
foo = ...
이런 테스트가 있었다고 한다.
test/FooImplSpec.hs
module FooImplSpec (main, spec) where
import Test.Hspec
-- 個別のspecファイルを実行するためにはmainが必要。
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "foo" $ do
it "returns bar" $ do
foo bar `shouldBe` foobar
지금까지 테스트를 실행할 때는
stack test
등으로 하고 있었지만, 컴파일 느리고(특히 링커의 실행이 느린), TDD 하기에는 불편하고 중복이었다. 기억이 맞으면 자동으로 -O1
가 걸리므로, 이것도 재빠르게 테스트의 실행을 반복하고 싶은 경우는 방해일 것이다 1추기: 어느 쪽 링커는 실행되고 있기 때문에, 엄청 빨라지고 있는지 말하면 미묘한 생각이 왔다.
뭐, stack에서 테스트를 실행하는 방법의 소개도 되고 있기 때문에 좋다고 할까.
그래서 확실히 인터프리터에서 실행할 수 있도록
stack runghc
에서 개별 테스트를 실행하는 방법을 조사해 보았다.미리 에 의존하는 패키지를 인스톨한 다음에
$ stack test --only-dependencies
# コマンドの内容に反して、実際には依存関係のインストールしか行わない。
# 「依存パッケージのテスト全部実行されちゃったらどうしよう!?」みたいな心配は不要。
과 같이 실행하면 된다.
$ stack runghc --package <作成中のパッケージ名> test/FooImplSpec.hs
자신의 패키지를 지정해 두는 것이 포인트.
하지 않으면 「
FooImpl
왜 modulule 없어?」라고 분노해 버린다.당연히,
runghc
왜 남은 인수를 건네주면 실행하는 example( it
)를 짜낼 수도 있다.$ stack runghc --package <作成中のパッケージ名> -- test/FooImplSpec.hs --match "実行したいexample"
# ^^^^^^
# 「--」を挟まなければ`test/FooImplSpec.hs`ではなく`stack`にオプションが解釈されてしまう恐れがあるので注意。
# この辺の仕様はほかのCLIツールを見習ってもうちょっと柔軟にしてほしい気もする。
hspec에 전달할 수있는 다른 옵션은 여기을 참조하십시오.
원래의
stack test
에서 사용할 수 있었던 --file-watch
옵션과 동등한 것을 하고 싶은 경우는 watchexec 등의 다른 툴을 사용하자.덧붙여 같은 테스트가 포함되는 편지지는 stack-templates 의 hspec.hsfiles 에 있으므로, 곧바로 시험하고 싶은 경우는
$ stack new <作りたいパッケージの名前> hspec
실행하면 된다.
단순히 최적화를 해제하고 싶은 경우는
--fast
를 건네주면 좋다. ↩Reference
이 문제에 관하여(stack runghc에서 테스트 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/igrep/items/d36de71471b295a58b67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)