温馨提示:本文翻译自stackoverflow.com,查看原文请点击:haskell - How can I write "unit" tests for Shake rules or actions?
haskell shake-build-system

haskell - 如何编写用于“摇动”规则或动作的“单元”测试?

发布于 2020-04-04 11:04:14

我正在为Shake编写专门的规则和预言家,我想为这些功能编写测试。我该如何在Shake中做到这一点?我没有找到任何可以使用的简单易用的actionToIO功能。

例如,我要测试以下行为:

checkGitWorkDirIsClean = do
  Stdout out <- cmd "git" [ "status", "-s", "-uno" ]
  pure $ null $ filter (/= "") (lines out)

因此我可以创建包含简约git数据的准备目录,并针对这些目录测试功能。

查看更多

提问者
insitu
被浏览
85
Neil Mitchell 2020-02-03 00:34

一般来说,测试构建系统很困难。Shake具有各种与棉绒相关的功能,这些功能可能是整个构建系统的最佳方法。

为了测试小片段,最好是放入IO而不是Action在上述情况下,cmd可以在ActionIOmonad中运行,因此对其进行测试IO可能要容易得多。

如果您确实有Action通过Shake构建系统驱动碎片的唯一方法,那就使用类似shake函数的方法。如果要以一致的方式进行操作,通常将设置设置shakeFiles/dev/null有用,因为这将导致Shake不会写到数据库,因此每次运行都将好像Shake从一个干净的表盘开始。