簡體   English   中英

使用 Rest 檢查 JSON 數組的值時出現問題

[英]Problem with checking values of JSON array using Rest Assured

我正在嘗試向我的應用程序添加一些帶有 Rest-Assured 的測試,但我不知道如何斷言一些嵌套值。 錯誤信息是:

預期:(包含“json”的集合)實際:[[json,spring,gulp,路徑等...]]

這是代碼:

 when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies.name", hasItems("json"));

這是 rest controller 返回的 JSON 文件:

[
    {
        "id": 346,
        "verified": true,
        "displayName": "eda656a2c3cb59ae840e40a28ba4ab50bfb9de0185abcb901c6af6dc59d6668f",
        "emails": [
            {
                "email": "16a23f2e5477df0bbcad718c3abc235b2cb8a1b6648d14f58d42a7be13df2b6e"
            }
        ],
        "personDependencies": [
            {
                "name": "json"
            },
            {
                "name": "spring"
            },
            {
                "name": "gulp"
            },
            {
                "name": "path"
            },
            {
                "name": "junit"
            },
            {
                "name": "activemq"
            },
            {
                "name": "hibernate"
            },
            {
                "name": "jstl"
            },
            {
                "name": "phantomjs"
            },
            {
                "name": "activiti"
            },
            {
                "name": "commons"
            },
            {
                "name": "h2"
            },
            {
                "name": "joda"
            },
            {
                "name": "log4j"
            },
            {
                "name": "exec"
            },
            {
                "name": "admin"
            },
            {
                "name": "coveralls"
            },
            {
                "name": "cxf"
            },
            {
                "name": "cglib"
            },
            {
                "name": "camel"
            },
            {
                "name": "sugaronrest"
            },
            {
                "name": "tslint"
            },
            {
                "name": "httpclient"
            },
            {
                "name": "guava"
            },
            {
                "name": "inventory"
            },
            {
                "name": "jackson"
            },
            {
                "name": "gson"
            },
            {
                "name": "event"
            },
            {
                "name": "OTRS"
            },
            {
                "name": "maven"
            },
            {
                "name": "karma"
            },
            {
                "name": "slf4j"
            },
            {
                "name": "postgresql"
            },
            {
                "name": "typescript"
            },
            {
                "name": "jasmine"
            },
            {
                "name": "spa"
            },
            {
                "name": "javax.servlet"
            }
        ],
        "countries": [],
        "member_of": [],
        "projects": [],
        "employee_type": [],
        "languages": [
            {
                "language": "reStructuredText",
                "sum": 575
            },
            {
                "language": "JSON",
                "sum": 21
            },
            {
                "language": "JavaScript",
                "sum": 4467
            },
            {
                "language": "Java",
                "sum": 7958
            },
            {
                "language": "Python",
                "sum": 2
            },
            {
                "language": "XML",
                "sum": 477
            },
            {
                "language": "Plain Text",
                "sum": 41
            }
        ],
        "distance": 0.6028837702084446
    }
]

我不知道如何做出正確的斷言,任何幫助都會很棒。 謝謝!

第一個問題,您不需要使用hasItems檢查項目是否存在,您應該使用hasItem

when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies.name", hasItem("json"));

然后,如果您需要在測試失敗時向斷言添加更多消息,您可以這樣做:

 when().
        get("/api/personsByID/{id}/{count}", 262, 2).
        then().
        statusCode(200).
        body("personDependencies.name",  describedAs("Array not containing the provided item",hasItem("json")));

在您的情況下,您可以驗證這種方式:

when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies[*].name", hasItem("json"));

如果我正確閱讀了您的問題,您需要檢查為特定 ID 返回的列表中是否存在某些值

下面應該為你工作

given().when().get().then().body("find {it.id == 346}.personDependencies.name", hasItems("json", "jackson"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM