In meinem Yesod-Test möchte ich einen Datensatz in der Datenbank in der Mitte des Tests ändern können. HierDb-Aktion im Yesod-Test ausführen
ist der Code, ich kam mit
yit "post is created by authorized user" $ do
request $ do
addPostParam "ident" "dummy"
setMethod "POST"
setUrl ("http://localhost:3000/auth/page/dummy" :: Text)
update 0 [UserAuthorized =. True]
postBody PostR (encode $ object [
"body" .= ("test post" :: Text),
"title" .= ("test post" :: Text),
"coverImage" .= ("test post" :: Text),
"author" .= (0 :: Int)
])
statusIs 200
Das mit dem Fehler
• Couldn't match expected type ‘IO a0’
with actual type ‘ReaderT backend0 m0()’
• In the second argument of ‘($)’, namely
‘update 0 [UserAuthorized =. True]’
In a stmt of a 'do' block:
runIO $ update 0 [UserAuthorized =. True]
In the expression:
do { settings <- runIO
$ loadYamlSettings
["config/test-settings.yml", "config/settings.yml"] [] useEnv;
foundation <- runIO $ makeFoundation settings;
yesodSpec foundation $ do { ydescribe "Auth" $ do { ... } };
runIO $ update 0 [UserAuthorized =. True];
.... }
versagt kann ich sagen, das ist, weil update
kehrt m()
statt YesodExample site()
wie request
, postBody
und statusIs
tun .
Wie könnte ich ein db-Update innerhalb dieses Tests machen?
Dies löste die Hälfte davon, ich bin fast fertig mit dem Lösen der anderen Ausgabe, die ich bald veröffentlichen werde. – Qwertie