Поскольку Elm - это чистый функциональный язык, вам часто не нужно делать каких-либо насмешек, потому что побочные эффекты ограничены взаимодействием с портами. Большую часть времени вы можете просто вызвать функцию, которую хотите проверить непосредственно.
Рассмотрим типичный пример задачи запроса HTTP привязывается к действию:
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)
Есть несколько вещей, которые выиграют от тестирования здесь, но ни один из них не требуют насмешливый.
Возможно, вы захотите протестировать декодирование JSON myDecoder
. Вы могли бы просто создать хорошие и плохие строки JSON и использовать Json.Decode.decodeString
с myDecoder
, чтобы проверить, что конечный результат соответствует вашему ожиданию.
Вещь, которая, вероятно, больше всего нуждается в модульном тестировании, это функция httpResultToAction
. Опять же, в этом примере это не требует насмешек. Все, что вам нужно сделать, это создать ряд хороших и плохих значений Result
и проверить ваши ожидания.
Был ли способ проверить 'fetchData' в этой ситуации? – phtrivier
Это зависит от того, что вы на самом деле хотите проверить. 'fetchData' возвращает тип' Effects', который является мелкой оболочкой вокруг 'Task'. Он фактически не выполняет HTTP-запрос. Ваши тесты будут вращаться вокруг отрыва получаемого значения результата «Эффекты» и проверки «Задачи», но в этот момент ваши тесты больше сосредоточены на тестировании кода Elm, чем на самом деле тестирование вашего приложения. –
На самом деле, что я мог найти сложно, сначала получить цепочку ''> 'операторов. Но тогда, возможно, просто получить его для компиляции является достаточным доказательством того, что он работает; и тестирование других частей - это значение. – phtrivier