我正在编写Elm测试套件,并希望使用存储在外部文件中的已知良好输入/输出对的列表检查函数的输出。我可以选择外部文件的格式,例如可以使用JSON,但是我需要将其分开,因为可以从其他语言访问它。 (我基本上确保该功能的Elm版本与其他版本匹配)。

我不想将值硬编码到Elm测试模块中。有没有办法用Elm和elm-test做到这一点?

最佳答案

我对自己的问题提出了以下答案,这似乎很合理,可以满足我的所有要求,但也许还有更好的选择。

  • 创建Elm native 模块-请参见this tutorial
  • 在其中,使用任何Node javascript函数加载数据,例如fs = require('fs')JSON.parse等。
  • 以简单的Javascript对象的形式返回数据,例如嵌套的数字等数组。
  • 在Elm测试套件中,此数据将需要作为Json Value处理,并使用Json.Decode.decodeValue
  • 进行解码

    完整的解决方案可能看起来像这样(Elm 0.18)-根据我的实际解决方案改编而成:

    tests/my_function_test_data.json中:
    [
        [0, 1, 2],
        [3, 4, 5]
    ]
    

    tests/Native/TestData.js中:
    var _user$project$Native_TestData = function () {
        var fs = require('fs');
        var path = require('path');
        var jsonPath = path.join(__dirname, '..', 'my_function_test_data.json');
        var myFunctionTestData = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
        return {
            myFunctionTestData: myFunctionTestData
        }
    }();
    

    tests/MyTests.elm中:
    import Native.TestData
    
    myFunctionTestData : List (List Float)
    myFunctionTestData =
        JD.decodeValue (JD.list (JD.list JD.float)) Native.TestData.myFunctionTestData
            |> \v -> case v of
                         Ok val ->
                             val
                         Err msg ->
                             Debug.crash msg
    

    该方法可以通过各种方式扩展(例如,不同的格式,或者将参数传递给 native 模块以确定要加载的文件),并且无需额外的步骤来生成源代码模块。

    关于testing - 将外部数据加载到Elm测试套件中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48378601/

    10-12 17:37