F # - Как мы можем проверить всю схему ответа API с помощью HttpFs.Client или Hopa c? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть тест, в котором после получения ответа я хотел бы проверить всю схему ответа (а не сравнение отдельного узла ответа / значения).

Пример теста:

    [<Test>]
        
let howtoValidateSchema () =
            
    let request = Request.createUrl Post "https://reqres.in/api/users"
                       
               |> Request.setHeader (Accept "application/json")
                       
               |> Request.bodyString """{"name": "morpheus",
         "job": "leader"}"""
         
               |> Request.responseAsString
                       
               |> run

Есть ли способ сохранить где-нибудь свою ожидаемую схему, и как только я получу ответ, я провожу сравнение, чтобы проверить, что ответ имеет такое же количество узлов (ни меньше, ни больше, чем ожидаемая схема)?

Я Хорошо, чтобы выбрать другие библиотеки, такие как FSharp.Data, если у нас нет прямого пути в HttpFs.Client. Я посмотрел на FSharp.Data (https://fsharp.github.io/FSharp.Data/library/JsonProvider.html), но не смог найти, насколько он соответствует требованиям, в которых сравнение схемы должно выполняться с сохраненнымExpectedSchemaJson = Response Json.

1 Ответ

1 голос
/ 17 июня 2020

Вы можете использовать Newtonsoft.Json.Schema для проверки схем:

open Newtonsoft.Json.Schema
open Newtonsoft.Json.Linq

let schema = JSchema.Parse expectedSchema
let json = JObject.Parse responeJson
let valid = json.IsValid schema

Однако это предполагает, что у вас есть заранее определенная схема. Если у вас нет такой схемы, лучше всего использовать JsonProvider, который может вывести ее за вас.

Запустите вызов вручную и сохраните результат в файле sample. json и создайте тип с помощью JsonProvider:

type ResponseSchema = JsonProvider<"sample.json">

, и вы можете использовать этот тип для анализа любого нового содержимого на основе образца (при условии, что образец является репрезентативным.

ResponseSchema.parse response

Это не будет проверять схему, но постарается максимально соответствовать введенным данным.

...