【发布时间】:2021-06-11 12:54:46
【问题描述】:
我正在尝试制作我的第一个 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 时,测试运行良好。
所以内存中的数据库在某个地方丢失了。但我不确定如何防止这种情况发生。
我该如何解决这个问题?那么我可以使用内存数据库进行测试吗?
谢谢!
【问题讨论】:
标签: sqlite haskell yesod-test