gpt4 book ai didi

ajax - Elm 中的模拟依赖

转载 作者:行者123 更新时间:2023-12-03 14:25:57 25 4
gpt4 key购买 nike

在每个 elm文件中,要导入的依赖项声明在顶部。
有没有办法在测试应用程序时模拟依赖项?

例如,假设我有一个应用程序使用 HTTP 模块发出 ajax 请求。当我测试我的模块时,我想避免发出实际的 ajax 请求,但我想有一个模拟的 HTTP 模块,它会返回一个虚假的响应,只是为了测试。

我怎么能这样做?

最佳答案

由于 Elm 是一种纯函数式语言,您通常不需要进行任何类型的模拟,因为副作用仅限于与端口的交互。大多数时候,你可以直接调用你想测试的函数。

考虑这个将 HTTP 请求任务映射到 Action 的典型示例:

type alias MyThing =
{ id : Int
, name : String
}

type Action
= FetchData
| ErrorOccurred String
| DataFetched MyThing

myDecoder : Json.Decoder MyThing
myDecoder =
Json.object2
MyThing
("id" := Json.int)
("name" := Json.string)

fetchData : Effects Action
fetchData =
Http.get myDecoder url
|> Task.toResult
|> Task.map httpResultToAction
|> Effects.task

httpResultToAction : Result Http.Error MyThing -> Action
httpResultToAction result =
case result of
Ok thing ->
DataFetched thing
Err err ->
ErrorOccurred (toString err)

有一些东西可以从这里的测试中受益,但它们都不需要 mock 。

您可能想要测试 myDecoder 的 JSON 解码。 .您可以简单地创建一些好的和坏的 JSON 字符串并使用 Json.Decode.decodeString myDecoder测试最终结果是否符合您的期望。

最需要单元测试的可能是 httpResultToAction。功能。同样,在这个例子中,这不需要模拟。你需要做的就是创造一些好的和坏的 Result值(value)观并测试您的期望。

关于ajax - Elm 中的模拟依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com