testing - 将外部数据加载到 Elm 测试套件中

标签 testing elm elm-test

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

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

最佳答案

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

  1. 创建 Elm Native 模块 - 参见 this tutorial .

  2. 在其中,使用任何 Node javascript 函数加载数据,例如fs = require('fs')JSON.parse

  3. 将数据作为简单的 Javascript 对象返回,例如嵌套的数字数组等。

  4. 在 Elm 测试套件中,此数据需要作为 Json Value 处理,并使用 Json.Decode.decodeValue 解码

完整的解决方案可能如下所示(Elm 0.18)——改编 self 的真实解决方案:

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/

相关文章:

testing - 如何使用 webdriver.io 模拟 ctrl-click 或 shift-click?

php - 运行 Symfony2 命令测试时如何设置命令行标志?

pattern-matching - 为什么从 Elm 中移除了案件 guard ?

elm - 在榆树测试中更改测试目录?

android - 加快android模拟器时间

testing - 如何测试服务器端 debugOnly 包

elm - 如何将 onClick 事件处理程序添加到 Elm 中的 Canvas 形状?

elm - 如何将行或列相对于另一个组件定位,同时与 Elm 的 mdgriffith/style-elements 保持对齐

在 Elm 中测试去抖动