Nodejs Mocha Chai 期望有一把钥匙或另一把钥匙

Nodejs Mocha Chai Expect to have one key OR another

我试过 google 它,但我没有找到答案。我有一个生成对象的函数,该对象可以具有两个键之一(假设键 'a' 和键 'b')。我 'expect' 这个对象只包含两个键中的一个,而不是两者,当然也不 none。该对象必须包含键 'a' 或 'b'。

如何在 Chai 中创建这个 "OR"?

Chai 没有专门针对这个小众案例的任何东西。

解决方案是自己跑腿,然后使用 assert.isTrue() 或等效的方法。

const
    hasProp = Object.hasOwnProperty,
    hasA = hasProp.call(myObject, 'a'),
    hasB = hasProp.call(myObject, 'b'),
    hasOne = hasA || hasB,
    hasBoth = hasA && hasB;

assert.isTrue(
    hasOne && !hasBoth,
    'myObject must contain only one of a or b'
);

请注意,我已针对此处的可读性和可扩展性进行了优化。如果你想对性能进行微优化并且只有两个键,这将在没有 hasOnehasBoth 常量的情况下工作。

assert.isTrue(
    hasA ? !hasB : hasB,
    'myObject must contain only one of a or b'
);