Я пытался проверить, все ли ссылки работают на домашней странице веб-сайта Yesod. Я написал этот тест hSpec.
module Handler.HomeSpec (spec) where
import Data.Either (fromRight)
import qualified Data.Text as T
import Network.Wai.Test (simpleBody)
import TestImport
import Yesod.Test.TransversingCSS (findAttributeBySelector)
getAllLinks :: YesodExample site [Text]
getAllLinks = withResponse $ \res -> do
let links = fromRight [] findAttributeBySelector (simpleBody res) "a" "href"
return $ T.concat <$> links
spec :: Spec
spec = withApp $
describe "Homepage" $ do
it "checks all links" $ do
get HomeR
statusIs 200
links <- getAllLinks
forM_ links $ \oneLink -> do
get HomeR
statusIs 200
get oneLink
statusIs 200
Все компилируется нормально, но функция get
избавляет от части хоста URL-адресов, которые вы ей предоставляете. Например, когда вы дадите ему https://github.com/zigazou/bazasso
, он попытается получить /zigazou/bazasso
, который возвращает код 404.
Есть ли способ заставить его работать так, как я хочу?
Должен ли я добавить функцию, которая удаляет внешние ссылки из тестов?
Разве это не подходящее место для этого?