我正在为Shake编写专门的规则和预言家,我想为这些功能编写测试。我该如何在Shake中做到这一点?我没有找到任何可以使用的简单易用的actionToIO
功能。
例如,我要测试以下行为:
checkGitWorkDirIsClean = do
Stdout out <- cmd "git" [ "status", "-s", "-uno" ]
pure $ null $ filter (/= "") (lines out)
因此我可以创建包含简约git数据的准备目录,并针对这些目录测试功能。
一般来说,测试构建系统很困难。Shake具有各种与棉绒相关的功能,这些功能可能是整个构建系统的最佳方法。
为了测试小片段,最好是放入IO
而不是Action
。在上述情况下,cmd
可以在Action
和IO
monad中运行,因此对其进行测试IO
可能要容易得多。
如果您确实有Action
通过Shake构建系统驱动碎片的唯一方法,那就使用类似shake
函数的方法。如果要以一致的方式进行操作,通常将设置设置shakeFiles
为/dev/null
有用,因为这将导致Shake不会写到数据库,因此每次运行都将好像Shake从一个干净的表盘开始。
非常感谢尼尔!我看了一下Shake的(令人印象深刻的)测试集,并尝试了后面的方法,但是在每个测试的临时目录中工作,因为我使用的还
git
需要一个准备好的目录。这个/dev/null
技巧听起来很有趣。测试有些笨拙和冗长,但至少可以提供一些安全性。