如何在Elm 0.18中进行没有elm-test的命令行断言?

时间:2017-05-27 22:19:01

标签: elm

我有几十个用于试验该语言的Elm 0.17程序。每个脚本都有简单的断言,程序将执行并运行所有断言,程序将成功(处理退出代码0)或失败(处理退出代码不是0)。这是一个例子:

module Main exposing (..)

import ElmTest exposing (runSuite, suite, defaultTest, assertEqual)
import List exposing (map)

boss = { name = "Alice", salary = 200000 }
worker = { name = "Bob", salary = 50000, supervisor = boss }
newWorker = { worker | name = "Carol" }

payrollTax : { a | salary : Float } -> Float
payrollTax { salary } = salary * 0.15


main = runSuite <| suite "Exploring records" <| map defaultTest
    [ assertEqual "Alice" (.name boss)
    , assertEqual boss worker.supervisor
    , assertEqual 7500.0 (payrollTax worker)
    , assertEqual boss newWorker.supervisor
    ]

回到Elm 0.17,我会跑

$ elm make records.elm --output tests.js && node tests.js

很好,我会看看测试是否有效!

我最终决定运行elm upgrade以达到0.18,现在(没有真正的惊喜)所有这些都被打破了。显然,elm-test的整个概念现在已完全改变了!当然,elm upgrade在更新我的elm-package.json

方面做得很好
    "dependencies": {
        "elm-community/elm-test": "4.0.0 <= v < 5.0.0",

但新模块不再有ElmTestrunSuite以及朋友了。我已经阅读了文档,看到我们现在有TestExpectFuzz,这很好。但似乎现在我们应该运行

elm test init

然后

elm test

发现并运行所有测试。我认为,现在我们不应该使用main编写应用程序,而是将测试作为暴露Test对象的模块放在测试目录中。然后我们运行elm test

但我不是在尝试进行测试!我只想编写一些脚本来编写关于语言功能的断言。我用其他几种语言完成了这项工作,我发现这是一种很好的学习方式。

那么,在Elm 0.18中,我如何制作一个可以用elm make或类似命令运行的程序,它从命令行运行并有断言? (我意识到Elm不适用于命令行程序,但这在0.17中很容易做到,所以我怎样才能在0.18中做类似的事情?

1 个答案:

答案 0 :(得分:2)

您使用的是该库的旧版本。 runSuite,断言等来自1.0.0版本,当前版本是4.0.0 +。

我建议你阅读Upgrading guide from 0.17 to 0.18the docs for elm-community/elm-test latest

我希望它有所帮助。