首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elm测试说模块声明是无效的,但是为什么?

Elm测试说模块声明是无效的,但是为什么?
EN

Stack Overflow用户
提问于 2018-09-30 10:59:28
回答 1查看 204关注 0票数 1

我对榆树非常陌生,我正在使用榆树0.19开始我的第一个宠物项目。

我想在我的应用程序中创建一个测试用例-- JSON解码。从服务器返回的JSON如下所示(所有内容都在一个名为Frontend.elm的文件中定义):

代码语言:javascript
复制
[
    {
        "gameId": "game1",
        "player1": "player1",
        "player2": "player2",
        "winner": "player1",
        "state": "ended"
    },
    {
        "gameId": "game3",
        "player1": "player1",
        "state": "joinable"
    }
]

我的榆树模特看起来是这样的:

代码语言:javascript
复制
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}

我的解码逻辑是这样定义的:

代码语言:javascript
复制
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-探索/测试包为此创建一个测试用例:

代码语言:javascript
复制
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运行它时,我会得到以下错误:

代码语言:javascript
复制
<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中的定义如下

代码语言:javascript
复制
module Frontend exposing (gameListDecoder, State(..), Game, Player(..))

我完全可以使用以下方法编译它:

代码语言:javascript
复制
$ elm make src/main/elm/Frontend.elm --output src/main/resources/static/index.html
Success! Compiled 1 module.

您实际上可以在github找到代码。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-01 06:21:49

一个Elm模块应该在文件的顶部有一个模块声明,即

代码语言:javascript
复制
module FrontendTest exposing (..)

在这种情况下应该能解决问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52577251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档