haskell: как я могу создать тест-шпиона? - PullRequest
0 голосов
/ 10 января 2019

Как я могу создать шпиона в 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

...