2017-12-30 100 views
0

私のyesodテストでは、テストの途中でdbのレコードを変更できるようにしたい。ここでyesododのdbアクションを実行する

は私がupdate戻りm()代わりのrequestようYesodExample site()postBodystatusIsが行うので、これは言うことができる私は、これはエラー

• 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]; 
     .... } 

で失敗

 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 

を思い付いたコードです。

このテストでは、どのようにDBアップデートを行うことができますか?

答えて

0

シビ私はrunDB秒1は、あなただけの整数でレコードを検索することができないで必要とされている指摘したように、この2つの問題、最初のものがありました。

この作業を取得するために、私はこの発見は、DBのレコードだし、それを更新し、次のコード

runDB $ do 
    (first :: Maybe (Entity User)) <- selectFirst [] [] 
    case first of 
     Nothing -> pure() -- handle the case when the table is empty 
     Just (Entity k _) -> update k [UserAuthorized =. True] 

を使用。 (first :: Maybe (Entity User)) <- selectFirst [] []を変更して、更新するレコードを選択します。

2

runDB機能を使用する必要があります。すなわち:

runDB $ update 0 [UserAuthorized =. True] 
+0

これは半分を解決しました。近いうちに掲載する予定の他の問題をほぼ解決しました。 – Qwertie

関連する問題