diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # ChangeLog for hspec-yesod
 
+## 0.2.1.1
+
+- [#8](https://github.com/parsonsmatt/hspec-yesod/pull/8)
+  - When `bodyContains` or `bodyNotContains` fail and the content is UTF-8, a partial body is printed to aid debugging. This matches the behavior of `statusIs`.
+
 ## 0.2.1.0
 
 - [#6](https://github.com/parsonsmatt/hspec-yesod/pull/6)
diff --git a/hspec-yesod.cabal b/hspec-yesod.cabal
--- a/hspec-yesod.cabal
+++ b/hspec-yesod.cabal
@@ -1,5 +1,5 @@
 name:               hspec-yesod
-version:            0.2.1.0
+version:            0.2.1.1
 license:            MIT
 license-file:       LICENSE
 author:             Nubis <nubis@woobiz.com.ar>, Matt Parsons <parsonsmatt@gmail.com>
@@ -74,4 +74,4 @@
 
 source-repository head
   type: git
-  location: git://github.com/yesodweb/yesod.git
+  location: https://github.com/parsonsmatt/hspec-yesod
diff --git a/src/Test/Hspec/Yesod.hs b/src/Test/Hspec/Yesod.hs
--- a/src/Test/Hspec/Yesod.hs
+++ b/src/Test/Hspec/Yesod.hs
@@ -655,7 +655,18 @@
 statusIs :: HasCallStack => Int -> YesodExample site ()
 statusIs number = do
   latestRequest <- requireLatestRequest
-  withResponse $ \(SResponse status headers body) -> do
+  withResponse $ \resp@(SResponse status _ _) -> do
+    
+    liftIO $ flip HUnit.assertBool (H.statusCode status == number) $ unlines
+      [ "Expected status: " <> show number
+      , "But status was: " <> (show $ H.statusCode status)
+      , "Request: " <> (T.unpack $ formatRequestBuilderDataForDebugging latestRequest)
+      , "Request body: " <> (T.unpack $ getRequestBodyPreview latestRequest)
+      , "Response body: " <> getResponseBodyPreview resp
+      ]
+
+getResponseBodyPreview :: SResponse -> String
+getResponseBodyPreview (SResponse _ headers body) =
     let mResponseContentType = lookup hContentType headers
         isResponseUTF8ContentType = maybe False YT.Internal.contentTypeHeaderIsUtf8 mResponseContentType
 
@@ -663,35 +674,28 @@
         previewFinal = if responsePreview == "" then "<empty response>" else
                 if isResponseUTF8ContentType then T.unpack $ YT.Internal.getBodyTextPreview body
                     else "<content-type not suitable for printing>"
+    in previewFinal
 
-    liftIO $ flip HUnit.assertBool (H.statusCode status == number) $ unlines
-      [ "Expected status: " <> show number
-      , "But status was: " <> (show $ H.statusCode status)
-      , "Request: " <> (T.unpack $ formatRequestBuilderDataForDebugging latestRequest)
-      , "Request body: " <> (T.unpack $ getRequestBodyPreview latestRequest)
-      , "Response body: " <> previewFinal
-      ]
 
-  where
-    getRequestBodyPreview :: RequestBuilderData site -> T.Text
-    getRequestBodyPreview RequestBuilderData{..} =
-        let mRequestContentType = lookup hContentType rbdHeaders
-            isRequestUTF8ContentType = maybe False YT.Internal.contentTypeHeaderIsUtf8 mRequestContentType
-        in case rbdPostData of
-                    MultipleItemsPostData xs -> case xs of
-                        [] -> "<empty body>"
-                        _ -> "<POST param preview not supported>"
-                    BinaryPostData lbs -> if isRequestUTF8ContentType then
-                        getRequestTextPreview lbs
-                        else "<empty body>"
-
-    getRequestTextPreview :: BSL8.ByteString -> T.Text
-    getRequestTextPreview body =
-      let characterLimit = 1024
-          textBody = TL.toStrict $ decodeUtf8 body
-      in if T.length textBody < characterLimit
-            then textBody
-            else T.take characterLimit textBody <> "... (use `rbdPostData` from `yedRequest` to see complete request body)"
+getRequestBodyPreview :: RequestBuilderData site -> T.Text
+getRequestBodyPreview RequestBuilderData{..} =
+    let mRequestContentType = lookup hContentType rbdHeaders
+        isRequestUTF8ContentType = maybe False YT.Internal.contentTypeHeaderIsUtf8 mRequestContentType
+    in case rbdPostData of
+                MultipleItemsPostData xs -> case xs of
+                    [] -> "<empty body>"
+                    _ -> "<POST param preview not supported>"
+                BinaryPostData lbs -> if isRequestUTF8ContentType then
+                    getRequestTextPreview lbs
+                    else "<empty body>"
+    where
+        getRequestTextPreview :: BSL8.ByteString -> T.Text
+        getRequestTextPreview body =
+          let characterLimit = 1024
+              textBody = TL.toStrict $ decodeUtf8 body
+          in if T.length textBody < characterLimit
+                then textBody
+                else T.take characterLimit textBody <> "... (use `rbdPostData` from `yedRequest` to see complete request body)"
 
 
 -- | Assert the given header key/value pair was returned.
@@ -773,9 +777,15 @@
 -- > get HomeR
 -- > bodyContains "<h1>Foo</h1>"
 bodyContains :: (HasCallStack) => String -> YesodExample site ()
-bodyContains text = withResponse $ \ res ->
-  liftIO $ HUnit.assertBool ("Expected body to contain " ++ text) $
-    (simpleBody res) `contains` text
+bodyContains text = do
+  latestRequest <- requireLatestRequest
+  withResponse $ \resp@(SResponse _ _ body) -> do
+      liftIO $ flip HUnit.assertBool (body `contains` text) $ unlines
+          [ "Expected body to contain: " <> text
+          , "Request: " <> (T.unpack $ formatRequestBuilderDataForDebugging latestRequest)
+          , "Request body: " <> (T.unpack $ getRequestBodyPreview latestRequest)
+          , "Response body: " <> getResponseBodyPreview resp
+          ]
 
 -- | Assert the last response doesn't have the given text. The check is performed using the response
 -- body in full text form.
@@ -787,9 +797,15 @@
 --
 -- @since 1.5.3
 bodyNotContains :: (HasCallStack) => String -> YesodExample site ()
-bodyNotContains text = withResponse $ \ res ->
-  liftIO $ HUnit.assertBool ("Expected body not to contain " ++ text) $
-    not $ contains (simpleBody res) text
+bodyNotContains text = do
+  latestRequest <- requireLatestRequest
+  withResponse $ \resp@(SResponse _ _ body) -> do
+      liftIO $ flip HUnit.assertBool (not $ body `contains` text) $ unlines
+              [ "Expected body to not contain: " <> text
+              , "Request: " <> (T.unpack $ formatRequestBuilderDataForDebugging latestRequest)
+              , "Request body: " <> (T.unpack $ getRequestBodyPreview latestRequest)
+              , "Response body: " <> getResponseBodyPreview resp
+              ]
 
 contains :: BSL8.ByteString -> String -> Bool
 contains a b = DL.isInfixOf b (TL.unpack $ decodeUtf8 a)
