如何为 Shake 规则或操作编写 "unit" 测试?
How can I write "unit" tests for Shake rules or actions?
我正在为 Shake 编写专门的规则和预言机,我想为这些功能编写测试。我怎样才能在 Shake 中做到这一点?我没有找到任何可以完成这项工作的简单易用的 actionToIO
函数。
例如,我想测试以下行为:
checkGitWorkDirIsClean = do
Stdout out <- cmd "git" [ "status", "-s", "-uno" ]
pure $ null $ filter (/= "") (lines out)
所以我可以创建包含简约 git 数据的准备目录并针对这些目录测试功能。
一般来说,测试构建系统很难。 Shake 有 various linting related features 这可能是构建整个构建系统的最佳方式。
为了测试小片段,最好在 IO
而不是 Action
中制作它们。在上面的例子中,cmd
在 Action
和 IO
monad 中都可以是 运行,所以在 IO
中测试它可能更容易。
如果您在 Action
中确实有片段,通过 Shake 构建系统驱动它的唯一方法是使用类似 shake
函数的东西。如果你想以一致的方式这样做,通常将 shakeFiles
设置为 /dev/null
可能会有用,因为这会导致 Shake 不写入数据库,因此每个 运行 将是尽管 Shake 是从零开始的。
我正在为 Shake 编写专门的规则和预言机,我想为这些功能编写测试。我怎样才能在 Shake 中做到这一点?我没有找到任何可以完成这项工作的简单易用的 actionToIO
函数。
例如,我想测试以下行为:
checkGitWorkDirIsClean = do
Stdout out <- cmd "git" [ "status", "-s", "-uno" ]
pure $ null $ filter (/= "") (lines out)
所以我可以创建包含简约 git 数据的准备目录并针对这些目录测试功能。
一般来说,测试构建系统很难。 Shake 有 various linting related features 这可能是构建整个构建系统的最佳方式。
为了测试小片段,最好在 IO
而不是 Action
中制作它们。在上面的例子中,cmd
在 Action
和 IO
monad 中都可以是 运行,所以在 IO
中测试它可能更容易。
如果您在 Action
中确实有片段,通过 Shake 构建系统驱动它的唯一方法是使用类似 shake
函数的东西。如果你想以一致的方式这样做,通常将 shakeFiles
设置为 /dev/null
可能会有用,因为这会导致 Shake 不写入数据库,因此每个 运行 将是尽管 Shake 是从零开始的。