我正在尝试制作我的第一个 Yesod 网站,现在正在添加测试。
我是这样设置的:
shortblitoWebServerSpec :: ShortblitoWebServerSpec -> Spec
shortblitoWebServerSpec =
yesodSpecWithSiteGenerator $
runNoLoggingT $
withSqlitePool ":memory:" 1 $ \pool -> do
let app =
App
{ appLogLevel = LevelWarn,
appStatic = shortblitoWebServerStatic,
appConnectionPool = pool,
appGoogleAnalyticsTracking = Nothing,
appGoogleSearchConsoleVerification = Nothing
}
_ <- runSqlPool (runMigrationQuiet migrateTables) pool
pure app
并进行一些测试:
spec :: Spec
spec = shortblitoWebServerSpec $
ydescribe "ShortenerR" $ do
yit "Home page exists" $ do
get ShortenerR
statusIs 200
yit "Post to shorten" $ do
postBody ShortenerR "test"
statusIs 200
当我运行时,我收到以下错误:
11/Jun/2021:14:52:15 +0200 [Error#yesod-core] SQLite3 returned ErrorError while attempting to perform prepare "SELECT \"id\",\"long\" FROM \"url\" WHERE \"long\"=?": no such table: url @(yesod-core-1.6.18-Ab7hNtiUzJgGsCLpKcpJyh:Yesod.Core.Class.Yesod src/Yesod/Core/Class/Yesod.hs:688:5)
但是,当我更改:memory:
为test.db
测试时运行良好。
所以内存中的数据库在某个地方丢失了。但我不确定如何防止这种情况。
我该如何解决这个问题?所以我可以使用内存数据库进行测试吗?
谢谢!