匹配"任何字符串"在Haskell中记录了HSpec测试

时间:2017-12-06 17:49:02

标签: haskell hspec

我有一个数据类Entity,其定义如下:

data Entity = Entity { id :: String, name :: String }

和一个返回IO Entity的函数:

newPersistentEntity :: String -> IO Entity

我想为此写一个HSpec测试:

spec :: Spec
spec = describe "newPersistentEntity function" $
       it "returns a new Entity with a generated id and the specified name" $
       newPersistentEntity "myName" `shouldReturn` Entity {id = <any string>, name = "myName"}

问题是id是数据库生成的UUID。我想断言id是一个让测试通过的字符串。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以创建记录,然后使用其trace1 = { "x": df.index, "y": df["value"], "line": {"shape": 'hv'}, "mode": 'lines', "name": 'value', "type": 'scatter' }; data = [trace1] plotly.offline.plot({ "data": data }) 值来创建您要比较的记录吗?类似的东西:

id

(注意:没有足够的信息来测试此代码,将其视为有些伪代码)。

作为旁注,您的代码看起来不像普通的持久代码,所以我假设您正在使用不同的库。

答案 1 :(得分:2)

id的{​​{1}}不能是Entity,因为静态输入。但是你可能想要强制进行评估以确保它不是最低点。

String

答案 2 :(得分:2)

我实际上是以不同的方式解决了这个问题,我将在这里展示上下文。你可能不应该使用它,因为接受的答案更容易理解,而且更简洁。

spec :: Spec
spec = describe "newPersistentEntity function" $
       it "returns a new Entity with a generated id and the specified name" $
       newPersistentEntity "myName" >>= (`shouldSatisfy` (\case
           Entity {id = _, name = "myName"} -> True
           _ -> False))

但要使其工作,您还需要应用lamda案例语言扩展名:

{-# LANGUAGE LambdaCase #-}