【问题标题】:Assert that a Array of JSONs contains one property断言 JSON 数组包含一个属性
【发布时间】:2017-12-29 17:30:52
【问题描述】:

我有一个允许添加/删除/编辑设备的设备商店项目,我正在尝试在邮递员中测试,在 POST 之后,将设备添加到列表中,可以在我的响应正文中找到该设备。我正在使用 Postman BDD 和 Chai sintax

[
{
    "deviceid": "5a72fec0-a220-4484-a058-e1e56dfc56c5",
    "name": "Huawei",
    "alias": "electronics",
    "quantity": 10,
    "price": 200,
    "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
    "links": []
},
{
    "deviceid": "90807800-c66c-46ec-ae46-687464e62797",
    "name": "Pixel 2",
    "alias": "electronics",
    "quantity": 10,
    "price": 300,
    "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
    "links": []
},
{
    "deviceid": "c2bd507d-e544-4ce8-b272-34cab732adb4",
    "name": "SONYk",
    "alias": "electronicsm",
    "quantity": 122,
    "price": 2222,
    "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
    "links": []
},
{
    "deviceid": "caa97d05-2672-48c5-8c56-e0da1298b20d",
    "name": "ASUS1",
    "alias": "electronics",
    "quantity": 1222,
    "price": 2222,
    "categoryid": "11535983-b9d0-4a0f-8d53-ca204446e0b8",
    "links": []
}

]

这是我的回应,因为可以看出它返回一个 JSON 数组,我正在寻找一种优雅的方式来断言具有属性“Pixel 2”的设备在数组中。我对任何其他可以帮助我实现这一目标的 JavaScript 库持开放态度。

【问题讨论】:

    标签: javascript postman chai web-api-testing


    【解决方案1】:

    Array#Filter

    var array=[
    {
        "deviceid": "5a72fec0-a220-4484-a058-e1e56dfc56c5",
        "name": "Huawei",
        "alias": "electronics",
        "quantity": 10,
        "price": 200,
        "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
        "links": []
    },
    {
        "deviceid": "90807800-c66c-46ec-ae46-687464e62797",
        "name": "Pixel 2",
        "alias": "electronics",
        "quantity": 10,
        "price": 300,
        "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
        "links": []
    },
    {
        "deviceid": "c2bd507d-e544-4ce8-b272-34cab732adb4",
        "name": "SONYk",
        "alias": "electronicsm",
        "quantity": 122,
        "price": 2222,
        "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
        "links": []
    },
    {
        "deviceid": "caa97d05-2672-48c5-8c56-e0da1298b20d",
        "name": "ASUS1",
        "alias": "electronics",
        "quantity": 1222,
        "price": 2222,
        "categoryid": "11535983-b9d0-4a0f-8d53-ca204446e0b8",
        "links": []
    }];
    var item = array.filter(item => item.name === "Pixel 2");
    console.log(item);

    【讨论】:

      【解决方案2】:

      使用Array#filterArray#length 来查找您的项目是否存在

      const array = [{
              "deviceid": "5a72fec0-a220-4484-a058-e1e56dfc56c5",
              "name": "Huawei",
              "alias": "electronics",
              "quantity": 10,
              "price": 200,
              "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
              "links": []
          },
          {
              "deviceid": "90807800-c66c-46ec-ae46-687464e62797",
              "name": "Pixel 2",
              "alias": "electronics",
              "quantity": 10,
              "price": 300,
              "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
              "links": []
          },
          {
              "deviceid": "c2bd507d-e544-4ce8-b272-34cab732adb4",
              "name": "SONYk",
              "alias": "electronicsm",
              "quantity": 122,
              "price": 2222,
              "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
              "links": []
          },
          {
              "deviceid": "caa97d05-2672-48c5-8c56-e0da1298b20d",
              "name": "ASUS1",
              "alias": "electronics",
              "quantity": 1222,
              "price": 2222,
              "categoryid": "11535983-b9d0-4a0f-8d53-ca204446e0b8",
              "links": []
          }
      ];
      
      const hasPixel2 = array.filter(item => item.name === 'Pixel 2').length > 0;
      console.log(hasPixel2);

      【讨论】:

        【解决方案3】:

        您可以使用find 方法,该方法接受回调提供的函数。

        var array=[
        {
            "deviceid": "5a72fec0-a220-4484-a058-e1e56dfc56c5",
            "name": "Huawei",
            "alias": "electronics",
            "quantity": 10,
            "price": 200,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "90807800-c66c-46ec-ae46-687464e62797",
            "name": "Pixel 2",
            "alias": "electronics",
            "quantity": 10,
            "price": 300,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "c2bd507d-e544-4ce8-b272-34cab732adb4",
            "name": "SONYk",
            "alias": "electronicsm",
            "quantity": 122,
            "price": 2222,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "caa97d05-2672-48c5-8c56-e0da1298b20d",
            "name": "ASUS1",
            "alias": "electronics",
            "quantity": 1222,
            "price": 2222,
            "categoryid": "11535983-b9d0-4a0f-8d53-ca204446e0b8",
            "links": []
        }];
        var item=array.find(function(item){
          return item.name=="Pixel 2";
        });
        console.log(item);
        console.log("Exists: "+item!=undefined);

        另一种方法是使用includes函数。

        var array=[
        {
            "deviceid": "5a72fec0-a220-4484-a058-e1e56dfc56c5",
            "name": "Huawei",
            "alias": "electronics",
            "quantity": 10,
            "price": 200,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "90807800-c66c-46ec-ae46-687464e62797",
            "name": "Pixel 2",
            "alias": "electronics",
            "quantity": 10,
            "price": 300,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "c2bd507d-e544-4ce8-b272-34cab732adb4",
            "name": "SONYk",
            "alias": "electronicsm",
            "quantity": 122,
            "price": 2222,
            "categoryid": "91a71dc0-4d40-4d20-a59d-bb30a348a7f2",
            "links": []
        },
        {
            "deviceid": "caa97d05-2672-48c5-8c56-e0da1298b20d",
            "name": "ASUS1",
            "alias": "electronics",
            "quantity": 1222,
            "price": 2222,
            "categoryid": "11535983-b9d0-4a0f-8d53-ca204446e0b8",
            "links": []
        }];
        var exists=array.map(function(item){
          return item.name;
        }).includes("Pixel 2");
        console.log(exists);

        【讨论】:

          【解决方案4】:

          不需要库。你可以使用Array.prototype.some:

          if (response.some(i => i.name == 'Pixel 2')) {
            // ...
          }
          

          【讨论】:

            【解决方案5】:

            你可以使用Array#some:

            response.some( o => o.name == "Pixel 2" )
            

            结果是一个布尔值。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-04-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-02-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多