Skip to content

Commit

Permalink
Add test cases for failing selectors and event triggering
Browse files Browse the repository at this point in the history
  • Loading branch information
rogeriochaves committed May 16, 2017
1 parent 8b65382 commit 0f76b48
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 6 deletions.
8 changes: 2 additions & 6 deletions src/TestContext.elm
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ module TestContext
import Expect exposing (Expectation)
import TestContextInternal as Internal
import Test.Html.Query
import Test.Html.Events as Events exposing (Event)
import Test.Html.Events exposing (Event)
import Time exposing (Time)


Expand Down Expand Up @@ -70,11 +70,7 @@ expectView context =

simulate : (Test.Html.Query.Single msg -> Test.Html.Query.Single msg) -> Event -> TestContext model msg -> TestContext model msg
simulate eventTrigger event context =
eventTrigger (expectView context)
|> Events.simulate event
|> Events.eventResult
|> Result.map ((flip update) context)
|> Result.withDefault (context)
Internal.simulate eventTrigger event context


done : TestContext model msg -> Expectation
Expand Down
18 changes: 18 additions & 0 deletions src/TestContextInternal.elm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ module TestContextInternal
, advanceTime
, expectModel
, expectView
, simulate
, done
-- private to elm-testable
, error
Expand All @@ -37,6 +38,7 @@ import Set exposing (Set)
import Testable.EffectManager as EffectManager exposing (EffectManager)
import Testable.Task exposing (fromPlatformTask, Task(..), ProcessId(..))
import Test.Html.Query
import Test.Html.Events as Events exposing (Event)
import Time exposing (Time)
import WebSocket.LowLevel

Expand Down Expand Up @@ -901,6 +903,22 @@ expectView context =
Html.text (report "expectView" context) |> Test.Html.Query.fromHtml


simulate : (Test.Html.Query.Single msg -> Test.Html.Query.Single msg) -> Event -> TestContext model msg -> TestContext model msg
simulate eventTrigger event context =
let
eventResult =
eventTrigger (expectView context)
|> Events.simulate event
|> Events.eventResult
in
case eventResult of
Ok msg ->
update msg context

Err err ->
withContext ((flip error) err) context


done : TestContext model msg -> Expectation
done =
expect "TestContext.done" (always ()) (always Expect.pass)
22 changes: 22 additions & 0 deletions tests/ViewTests.elm
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
module ViewTests exposing (all)

import Expect
import Html
import Html.Events exposing (onClick)
import Test exposing (..)
import Test.Html.Events as Events
import Test.Html.Query as Query
import Test.Html.Selector as Selector
import TestContext exposing (TestContext)
import TestContextInternal


htmlProgram : TestContext (List String) String
Expand All @@ -27,6 +29,16 @@ htmlProgram =
|> TestContext.start


expectError : String -> TestContext model msg -> Expect.Expectation
expectError expectedError context =
case context of
TestContextInternal.TestContext _ ->
Expect.fail "TestContext should have an error an it doesn't"

TestContextInternal.TestError { error } ->
Expect.equal expectedError error


all : Test
all =
describe "View"
Expand All @@ -48,4 +60,14 @@ all =
|> TestContext.simulate (Query.find [ Selector.tag "button" ]) Events.Click
|> TestContext.expectView
|> Query.has [ Selector.tag "p" ]
, test "fails when triggering events on a not found element" <|
\() ->
htmlProgram
|> TestContext.simulate (Query.find [ Selector.tag "foo" ]) Events.Click
|> expectError "Query.find always expects to find 1 element, but it found 0 instead."
, test "fails when triggersingevents on an element that does not handle that event" <|
\() ->
htmlProgram
|> TestContext.simulate (Query.find [ Selector.tag "button" ]) Events.DoubleClick
|> expectError "Failed to decode string"
]

0 comments on commit 0f76b48

Please sign in to comment.