Chai - 检查2个对象数组具有相同的标题

时间:2017-11-22 05:41:54

标签: javascript arrays mocha chai

假设我有2个包含对象的数组:

var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]

var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]

我如何验证每个数组中的标题值是否相同,即使它们的顺序不同?

我可以使用类似的东西:

expect(aArray.title).to.deep.equal(bArray.title)

然后对于那个匹配的标题项,我想检查两者之间的价格是否相同。

我也试过了 expect(cart).to.deep.include.members(cart2).but.not.own.deep.include.property('someDetail');

4 个答案:

答案 0 :(得分:1)

我认为你可以从这两个阵列获得所有头衔。

并使用eql来比较它们。

title

更新

如果您想检查pricevar aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ] var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ] var aTitle = aArray.map(item => `${item.title}|${item.price}`); // ['Abc|1,200', 'def|900'] var bTitle = bArray.map(item => `${item.title}|${item.price}`); expect(aTitle).eql(bTitle); 是否匹配,目前我认为一种方法会更容易。

您可以将标题和价格作为字符串连接起来并进行比较。

            ListFooterComponent={<Footer {...this.props}/>}

答案 1 :(得分:1)

我猜有多种方法可以做到这一点。这种方式只需要您将bArray映射到只有您需要的键的对象,即titleprice

然后您可以使用membersdeep。如您所见,不需要相同的数组成员顺序,但需要相同的键。

&#13;
&#13;
const aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]

const bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]

const newBArray = bArray.map(({ title, price }) => ({ title, price }))

try {
  chai.expect(newBArray).to.have.deep.members(aArray)
} catch (e) {
  console.log("Error!", e)
} finally {
  console.log("Done with execution.")
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.1.2/chai.min.js"></script>
&#13;
&#13;
&#13;

我已经使用了try / catch / finally来使代码提供有关正在发生的事情的有效提示。

答案 2 :(得分:0)

您可以在数组上使用var jdates =[]; var jvalues =[]; datat.Datase.forEach(function (kv) { kv.Data.forEach(function (d) { if (!(d.Date instanceof Date)){ jdates.push(d.Date = parseDate(d.Date)); jvalues.push(d.Value = parseInt(d.Value)); } else { jdates.push(d.Date); jvalues.push(d.Value); } }); }); 方法。

  

find()方法返回数组中第一个元素的值   满足提供的测试功能。否则未定义   返回。

find()

答案 3 :(得分:0)

您使用这种方式验证。

server { 
    listen 80; 
    listen [::]:80;

    root /var/www/campaignmanager/bannerad/public;

    index index.php index.html index.htm;

    server_name exmaple.com www.example.com;

    location / {
      try_files $uri $uri/index.html $uri.html @upstream;
    }

    location @upstream {
     location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/run/php/php7.1-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
     }
   }
}