将外部数据加载到 Elm 测试套件中
Load external data into Elm test suite
我正在编写一个 Elm 测试套件,并希望使用存储在外部文件中的已知良好 input/output 对列表来检查函数的输出。我可以选择外部文件的格式,例如我可以使用 JSON,但我需要将它分开,因为它可以从其他语言访问。 (我基本上确保该函数的 Elm 版本与其他版本匹配)。
我不想将值硬编码到 Elm 测试模块中。有没有办法用 Elm 和 elm-test 做到这一点?
针对我自己的问题,我得出了以下答案,这似乎是合理的并且满足了我的所有要求,但也许还有更好的答案。
创建 Elm Native 模块 - 请参阅 this tutorial。
在其中,使用任何节点 javascript 函数加载数据,例如fs = require('fs')
和 JSON.parse
等
Return 数据作为简单的 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
这种方法可以通过多种方式进行扩展(例如不同的格式,或者将参数传递给本机模块以确定加载哪个文件),并且它避免了需要额外的步骤来生成源代码模块。
我正在编写一个 Elm 测试套件,并希望使用存储在外部文件中的已知良好 input/output 对列表来检查函数的输出。我可以选择外部文件的格式,例如我可以使用 JSON,但我需要将它分开,因为它可以从其他语言访问。 (我基本上确保该函数的 Elm 版本与其他版本匹配)。
我不想将值硬编码到 Elm 测试模块中。有没有办法用 Elm 和 elm-test 做到这一点?
针对我自己的问题,我得出了以下答案,这似乎是合理的并且满足了我的所有要求,但也许还有更好的答案。
创建 Elm Native 模块 - 请参阅 this tutorial。
在其中,使用任何节点 javascript 函数加载数据,例如
fs = require('fs')
和JSON.parse
等Return 数据作为简单的 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
这种方法可以通过多种方式进行扩展(例如不同的格式,或者将参数传递给本机模块以确定加载哪个文件),并且它避免了需要额外的步骤来生成源代码模块。