Я очень новичок в Elm, и я начинаю свой первый проект для домашних животных, используя Elm 0.19.
Я хочу создать тестовый пример JSON-декодирования в моем приложении.JSON, возвращенный с сервера, выглядит следующим образом (все определяется в файле с именем Frontend.elm
):
[
{
"gameId": "game1",
"player1": "player1",
"player2": "player2",
"winner": "player1",
"state": "ended"
},
{
"gameId": "game3",
"player1": "player1",
"state": "joinable"
}
]
Мои модели Elm выглядят так:
type Player =
Player String
type State
= Joinable
| Started
| Ended
type alias Game =
{ gameId : String
, player1 : Maybe Player
, player2 : Maybe Player
, winner : Maybe Player
, state : State}
и мое декодированиелогика определяется следующим образом:
gameStateDecoder : Decode.Decoder State
gameStateDecoder =
string
|> andThen (\stateAsString ->
case stateAsString of
"joinable" ->
succeed Joinable
"ended" ->
succeed Ended
"started" ->
succeed Started
unknown ->
fail <| "Unknown game state: " ++ unknown
)
playerDecoder : Decode.Decoder (Maybe Player)
playerDecoder =
(maybe string)
|> andThen (\maybePlayerString ->
succeed
<| case maybePlayerString of
Just player ->
Just (Player player)
_ ->
Nothing
)
gameListDecoder : Decode.Decoder (List Game)
gameListDecoder =
Decode.list gameDecoder
gameDecoder : Decode.Decoder Game
gameDecoder =
Decode.map5 Game
(field "gameId" string)
(field "player1" playerDecoder)
(field "player2" playerDecoder)
(field "winner" playerDecoder)
(field "state" gameStateDecoder)
Теперь я попытался создать тестовый пример для этого, используя пакет elm-explorations / test :
import Frontend exposing (..)
import Expect exposing (equal)
import Test exposing (Test, test)
import Json.Decode exposing (decodeString)
decodesGameList : Test
decodesGameList =
test "Properly decodes a game list" <|
\() ->
let
json =
"""
[
{
"gameId": "game",
"state": "joinable"
}
]
"""
decodedOutput =
decodeString gameListDecoder json
in
equal
decodedOutput
(Ok
[ Game "game" Nothing Nothing Nothing Joinable ]
)
но когда я пытаюсь запустить его с помощью elm-test
, я получаю эту ошибку:
<project path>/tests/FrontendTest.elm has an invalid module declaration. Check the first line of the file and make sure it has a valid module declaration there!
Я не понимаю, что я делаю неправильно.Модуль определяется следующим образом: Frontend.elm
:
module Frontend exposing (gameListDecoder, State(..), Game, Player(..))
Я могу прекрасно скомпилировать его, используя:
$ elm make src/main/elm/Frontend.elm --output src/main/resources/static/index.html
Success! Compiled 1 module.
Вы можете найти код на github .
Как я могу решить это?