我一直想知道哪些方法(如果有的话)用于测试通过网络进行请求的Haskell应用程序?来自Ruby的土地,我一直在寻找任何可以存根或"模拟"网络调用以测试Haskell函数的东西.我对类似"VCR"的解决方案特别感兴趣(例如:https://github.com/myronmarston/vcr),因为它似乎是最可行的选择,恕我直言.
因此,我希望能够记录一次网络请求/响应对,然后将这些记录重用于后续测试.我提出了自己的简单混合,在测试之前启动Web服务器(warp),提供预先录制的响应,但我必须将应用程序中的所有URL指向"localhost".我认为,并不总是可以替换应用程序中的所有URL.虽然我对上面描述的我自己的设置非常满意(并希望稍后从中创建一个专用的测试工具/框架"插件"),但我宁愿不重新发明轮子.
在开发或测试项目时,我通常需要运行一些重复的辅助任务.例如:下载一些数据,设置数据库,清理日志等.在Ruby领域,它们由rake其他语言喜欢make或其他东西处理(任务偶尔依赖于其他任务,因此我们偶尔可能需要执行一项任务它取决于的子任务).
那么,是否有一些传统方法在Haskell项目中组织这些任务?
我认为cabal可以使用它,但并非所有这些辅助任务都是关于运行Haskell代码:有时它只是rm -r logs/*.log用wget或执行或下载一些数据的情况curl.让cabal的test目标取决于其他的cabal目标是否有意义,呃,从Haskell代码运行shell脚本/命令?(如果有可能在cabal中有依赖目标?)
或者,我可以使用make,但"平均哈斯克勒"(例如"外部"项目贡献者)会发现直观吗?我相信cabal test在发现它需要先为测试设置数据库然后运行一系列其他任务之前,首先要先尝试一下.首先会注意到一个Makefile吗?
我在Haskell项目中找不到任何处理这些辅助任务的方法.