如何检查一些属性值和其他属性只存在?

时间:2016-07-26 19:39:40

标签: javascript node.js unit-testing chai

使用chaijs,如何检查对象的某些属性是否等于某个属性而其他属性只存在于一个属性中?

这样的东西
return expect(profilePromise)
        .to.eventually.be.fulfilled
        .to.have.property('__data')
        .to.any.deep.equal({
          id: Number, <--------- here
          firstName: facebookProfile.first_name,
          lastName: facebookProfile.last_name,
          email: facebookProfile.email,
          gender: facebookProfile.gender,
          isPopularVerified: facebookProfile.is_verified,
          isVerified: facebookProfile.verified,
          locale: facebookProfile.locale,
          timezone: facebookProfile.timezone,

          createdOn: Number, <--------- here
          updatedOn: Number, <--------- here
        })

我想知道我有idcreatedOnupdatedOn属性,但实际上我并不关心它的值。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用模式匹配。 Chai JSON Pattern 插件可以帮助您做到这一点。

例如

const chai = require('chai');
const chaiJsonPattern = require('chai-json-pattern').default;
const chaiAsPromised = require('chai-as-promised');

chai.use(chaiJsonPattern);
chai.use(chaiAsPromised);

const { expect } = chai;

describe('38598544', () => {
  it('should pass', () => {
    const profilePromise = Promise.resolve({
      __data: {
        id: Math.random(),
        firstName: 'facebookProfile.first_name',
        lastName: 'facebookProfile.last_name',
        email: 'facebookProfile.email',
        gender: 'facebookProfile.gender',
        isPopularVerified: 'facebookProfile.is_verified',
        isVerified: 'facebookProfile.verified',
        locale: 'facebookProfile.locale',
        timezone: 'facebookProfile.timezone',
        createdOn: Date.now(),
        updatedOn: Date.now(),
      },
    });

    return expect(profilePromise).to.eventually.be.fulfilled.to.have.property('__data').to.matchPattern(`{
      "id": Number,
      "firstName": "facebookProfile.first_name",
      "lastName": "facebookProfile.last_name",
      "email": "facebookProfile.email",
      "gender": "facebookProfile.gender",
      "isPopularVerified": "facebookProfile.is_verified",
      "isVerified": "facebookProfile.verified",
      "locale": "facebookProfile.locale",
      "timezone": "facebookProfile.timezone",

      "createdOn": Number,
      "updatedOn": Number,
    }`);
  });
});

测试结果:

  38598544
    ✓ should pass


  1 passing (28ms)
相关问题