Как я могу создать шпиона в haskell? В следующем примере я хочу подтвердить параметры (тело), переданные в doPostReq , введя spy-функцию через Ctx из hspec-unit-test:
data Ctx = Ctx {
doPostReq :: Ctx -> String -> String -> IO (Maybe B.ByteString)
}
addToCart :: Ctx -> Int -> IO String
addToCart ctx prodNo = do
...
resp <- (doPostReq ctx) ctx "http://localhost:8080/addToCart" prodToCartReqDTO
...
doPostReqSpy :: Ctx -> String -> String -> IO (Maybe B.ByteString)
doPostReqSpy ctx endpoint body = do
...
cartSpec =
describe "cart" $ do
it "correctly calls addToCart via rest" $ do
let ctxMock = ctx { doPostReq = doPostReqSpy }
addToCart ctxMock 1234
??? `shouldReturn` ???
, даже если я пытаюсь использовать обратный вызов, я не могу вернуть утверждение в hspecs it :
doPostReqSpy :: (String -> String) -> Ctx -> String -> String -> IO (Maybe B.ByteString)
doPostReqSpy cb ctx endpoint body = do
cb body
...
cartSpec =
describe "cart" $ do
it "correctly calls addToCart via rest" $ do
let bodyAssertion = (\body -> body `shouldBe` "...") --
let ctxMock = ctx { doPostReq = doPostReqSpy bodyAssertion }
Я не знаю, как вернуть это утверждение в «правильные вызовы addToCart через rest» -spec 101