我有一个数据类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
是一个让测试通过的字符串。
我怎样才能做到这一点?
答案 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 #-}