2017-05-27 47 views
3

我有数十个Elm 0.17程序用于语言实验。每个脚本都包含简单的断言,程序会执行并运行所有的断言,程序将成功(处理退出代码0)或失败(处理退出代码不为0)。这里有一个例子:如何在Elm 0.18中进行命令行断言而无需elm-test?

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 
    ] 

回到榆树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和朋友了一个不错的工作。我已阅读文档并看到我们现在有Test,ExpectFuzz,这很好。但似乎我们现在应该运行

elm test init 

然后

elm test 

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

但是我不想运行测试!我只想编写一些关于语言特性的断言。我已经用其他几十种语言完成了这项工作,我发现这是一种很好的学习方式。

那么,如何在Elm 0.18中创建一个程序,我可以运行elm make或类似的程序,该程序从命令行运行并具有断言? (我知道榆树不适用于命令行程序,但在0.17中很容易做到,所以我怎么能在0.18中做类似的事情?

+0

我建议你安装的elm-的早期版本测试v4添加了新的语法,但实际上只在测试版中,v3仍然可以在0.18版本下运行,并且具有你所需要的钩子nt –

+0

谢谢,尽管我正在寻找的钩子类似于elm-test版本1.1,它具有带有函数runSuite:Test - > Program Never的模块ElmTest。我找不到任何函数,即使在elm-test 3.0.0中,也会产生一个'Program'对象。因此我无法从'main'运行测试。我错过了什么吗?有什么办法可以产生一个'Program'对象并仍然使用断言? –

+0

哎呦 - 道歉 - 我是从记忆中写下来的,现在看它现在在v3中跑步排出了 –

回答

2

您使用的是该库的旧版本runSuite,assertions等从1.0.0版本和当前版本为4.0.0+。

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

我希望它能帮助。

+0

确实。问题是4.0.0中“runSuite”的等价物。 ElmTest.runSuite在1.0.0中的美丽。是那个函数返回了一个'Program'值,所以我可以从'main'中使用它。我喜欢那个!现在4.1.0,我没有看到任何返回程序的东西。所以据我所知,这个软件包的更新摆脱了我喜欢的东西。你知道我可以用'main'运行断言吗?如果答案是否定的,那就这样吧,但是我真的希望他们不要把它扔掉。 :)我只是找不到它。 –

+2

这个库的新版本更加复杂和强大。目标是将您的测试与应用程序分离。 如果您使用[node-test-runner软件包](http://package.elm-lang.org/packages/rtfeldman/node-test-runner/latest)中的Test.Runner.Node,则可以获得TestProgram。 另外有趣的是看看[elm-core如何执行测试](https://github.com/elm-lang/core/tree/master/tests) – nidstang

相关问题