Elm tests говорит, что объявление модуля недействительно, но почему? - PullRequest
0 голосов
/ 30 сентября 2018

Я очень новичок в 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 .

Как я могу решить это?

1 Ответ

0 голосов
/ 01 октября 2018

Ожидается, что модуль Elm будет иметь объявление модуля вверху файла, т.е.

module FrontendTest exposing (..)

должно решить проблему в этом случае.

...