我正在编写一个小型ruby应用程序,它通过etcd-ruby gem使用etcd来协调集群中的活动。
我遇到的一个问题是如何为它编写规格。
我的第一种方法是尝试在客户端级别模拟etcd调用,但这是次优的,因为客户端返回的响应与元数据相当复杂。我想在etcd客户端上编写一个包装器去除元数据并使模拟方法更容易,但问题是算法有时确实依赖于这个元数据,因此抽象变得非常漏洞,只是一个痛苦的间接层。
另一种方法是使用VCR记录实际请求。这样做的好处是允许specs在没有etcd的情况下运行,但它会变得很糟糕,初始化状态和管理磁带。
这让我想到了我的问题。 etcd足够快作为一个独立节点,它似乎最简单,最简单直接在测试中使用它而不是试图将其存根。这里唯一的问题是我看不到任何简单的方法来清除测试之间的键空间。不允许对根密钥进行递归删除。此外,这不会重置索引。我检查了etcd-ruby
宝石规格,它似乎通过使用基于uuids的键来绕过这个问题,这样钥匙就不会碰撞。我认为这是一种可行的方法,但还有更好的方法吗?