The yesod-test package

[Tags: library, mit]

API docs and the README are available at http://www.stackage.org/package/yesod-test


[Skip to ReadMe]

Properties

Versions0.1, 0.2.0, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.2.0.4, 0.2.0.5, 0.2.0.6, 0.2.1, 0.3.0, 0.3.0.1, 0.3.1, 0.3.1.1, 0.3.2, 0.3.3, 0.3.3.1, 0.3.3.2, 0.3.4, 0.3.5, 1.2.0, 1.2.1, 1.2.1.1, 1.2.1.2, 1.2.1.3, 1.2.1.4, 1.2.1.5, 1.2.2, 1.2.3, 1.2.3.1, 1.2.3.2, 1.2.4, 1.2.5, 1.2.6, 1.4.0, 1.4.0.1, 1.4.0.2, 1.4.0.3, 1.4.1, 1.4.1.1, 1.4.2, 1.4.2.1, 1.4.2.2, 1.4.3, 1.4.3.1, 1.4.4, 1.5, 1.5.0.1
Change logChangeLog.md
Dependenciesattoparsec (>=0.10), base (>=4.3 && <5), blaze-builder, blaze-html (>=0.5), blaze-markup (>=0.5.1), bytestring (>=0.9), case-insensitive (>=0.2), containers, cookie, hspec-core (==2.*), html-conduit (>=0.1), http-types (>=0.7), HUnit (>=1.2), monad-control, network (>=2.2), persistent (>=1.0), text, time, transformers (>=0.2.2), wai (>=3.0), wai-extra, xml-conduit (>=1.0), xml-types (>=0.3), yesod-core (>=1.4.14) [details]
LicenseMIT
AuthorNubis <nubis@woobiz.com.ar>
MaintainerMichael Snoyman, Greg Weber, Nubis <nubis@woobiz.com.ar>
StabilityExperimental
CategoryWeb, Yesod, Testing
Home pagehttp://www.yesodweb.com
Source repositoryhead: git clone git://github.com/yesodweb/yesod.git
UploadedWed Aug 26 06:18:36 UTC 2015 by GregWeber
DistributionsDebian:1.4.3.1, FreeBSD:1.4.3.1, LTSHaskell:1.4.4, Stackage:1.5.0.1
Downloads19642 total (452 in last 30 days)
Votes
0 []
StatusDocs available [build log]
Last success reported on 2015-08-26 [all 1 reports]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for yesod-test-1.5.0.1

yesod-test

Pragmatic integration tests for haskell web applications using WAI and optionally a database (Persistent). Its main goal is to encourage integration and system testing of web applications by making everything easy to test. Your tests are like browser sessions that keep track of cookies and the last visited page. You can perform assertions on the content of HTML responses using CSS selectors. You can also easily build requests using forms present in the current page. This is very useful for testing web applications built in yesod for example, where your forms may have field names generated by the framework or a randomly generated CSRF "_token" field. Your database is also directly available so you can use runDB to set up backend pre-conditions, or to assert that your session is having the desired effect. The testing facilities behind the scenes are HSpec (on top of HUnit). The code sample below covers the core concepts of yesod-test. Check out the yesod-scaffolding for usage in a complete application.

spec :: Spec
spec = withApp $ do
    describe "Basic navigation and assertions" $ do
      it "Gets a page that has a form, with auto generated fields and token" $ do
        get ("url/to/page/with/form" :: Text) -- Load a page.
        statusIs 200 -- Assert the status was success.

        bodyContains "Hello Person" -- Assert any part of the document contains some text.
        
        -- Perform CSS queries and assertions.
        htmlCount "form .main" 1 -- It matches 1 element.
        htmlAllContain "h1#mainTitle" "Sign Up Now!" -- All matches have some text.

        -- Performs the POST using the current page to extract field values:
        request $ do
          setMethod "POST"
          setUrl SignupR
          addToken -- Add the CSRF _token field with the currently shown value.

          -- Lookup field by the text on the labels pointing to them.
          byLabel "Email:" "gustavo@cerati.com"
          byLabel "Password:" "secret"
          byLabel "Confirm:" "secret"

      it "Sends another form, this one has a file" $ do
        request $ do
          setMethod "POST"
          setUrl ("url/to/post/file/to" :: Text)
          -- You can easily add files, though you still need to provide the MIME type for them.
          addFile "file_field_name" "path/to/local/file" "image/jpeg"
          
          -- And of course you can add any field if you know its name.
          addPostParam "answer" "42"

        statusIs 302

    describe "Database access" $ do
      it "selects the list" $ do
        -- See the Yesod scaffolding for the runDB implementation
        msgs <- runDB $ selectList ([] :: [Filter Message]) []
        assertEqual "One Message in the DB" 1 (length msgs)