【问题标题】:How to check for the property in Chai inside the array of objects如何在对象数组中检查 Chai 中的属性
【发布时间】:2021-07-04 15:59:43
【问题描述】:

如何使用 Chai 检查对象数组中的属性。我的对象数组是这样的:

const myObj = [ {fName: 'abc', lName: 'xyz'}, {fName: 'efg', lName: 'lmn'}, ... ]

我想检查每个对象是否必须具有fNamelName 属性,无论它们的值如何!

附: : 我知道一个名为 chai-things 的库,通过它我们可以实现这一点,但是如果我只想使用 chai 呢?

【问题讨论】:

  • 这个答案会帮助你stackoverflow.com/questions/1098040/…。循环遍历元素并检查属性是否在字典中
  • 同意。我可以手动循环遍历它,但是,我不想这样做。 Chai 框架中有什么可用的东西来实现这一点吗?
  • 你可以用 chai-things npmjs.com/package/chai-things 解决这个问题。安装后做foods.should.all.have.property('fName', 'lName')

标签: node.js unit-testing mocha.js integration-testing chai


【解决方案1】:

如果您不想使用 for 循环或 chai-things 库,可以使用 deep equal expectation 在单个断言中比较整个数组:

const expect = require('chai').expect;

const myObj = [ {fName: 'abc', lName: 'xyz'}, {fName: 'efg', lName: 'lmn'} ];

describe('Test Suite', () => {
  it('MyObj Test', function() {
    expect(myObj).to.eql([ {fName: 'abc', lName: 'xyz'}, {fName: 'efg', lName: 'lmn'}]);
  });
});

如果您更改第二个对象并运行测试,您会看到一个非常具体的错误:

AssertionError: expected [ Array(2) ] to deeply equal [ Array(2) ]
  + expected - actual

       "lName": "xyz"
     }
     {
       "fName": "efg"
  -    "lName": "lmn"
  +    "lName": "lmn2"
     }
   ]

或者你必须明确地写下所有期望:

expect(myObj).to.be.an('array');
expect(myObj[0]).to.have.property('fName');
expect(myObj[0]).to.have.property('lName');
expect(myObj[1]).to.have.property('fName');
expect(myObj[1]).to.have.property('lName');
// and so on...

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多