Chai の assert.hasAnyKeys, .hasAllKeys, .containsAllKeys
Chaiの assert
でオブジェクトのキーの有無を検証するやつ、微妙に覚えられない
hasAnyKeys
は、指定されたキーをどれか一つでも持ってればOK。doesNotHaveAnyKeys
は、指定されたキーを一つも持ってなければOK (hasAnyKeys
の逆)。hasAllKeys
は、指定されたキーを過不足なく持ってればOK。doesNotHaveAllKeys
、指定されたキーに過不足があればOK (hasAllKeys
の逆)。containsAllKeys
は、指定されたキーを全て含んでればOK。
単純な強度としては hasAllKeys
> containsAllKeys
> hasAnyKeys
containsAllKeys
の逆にあたるのは doesNotHaveAnyKeys
ということになる
'use strict';
const assert = require('chai').assert;
const obj = {
id: 1,
name: 'キリウ君',
age: 14
};
//-----------------------------
// hasAnyKeys
// [○] id を持ってるからOK
assert.hasAnyKeys(obj, ['id', 'aaa']);
// [×] aaa も bbb も持ってないからNG
assert.hasAnyKeys(obj, ['aaa', 'bbb']);
//-----------------------------
// doesNotHaveAnyKeys
// [○] aaa も bbb も持ってないからOK
assert.doesNotHaveAnyKeys(obj, ['aaa', 'bbb']);
// [×] id を持ってるからNG
assert.doesNotHaveAnyKeys(obj, ['id', 'aaa']);
//-----------------------------
// hasAllKeys
// [○] id, name, age を過不足なく全て持ってるからOK
assert.hasAllKeys(obj, ['id', 'name', 'age']);
// [×] age も持ってるのに指定が不足してるからNG
assert.hasAllKeys(obj, ['id', 'name']);
//-----------------------------
// doesNotHaveAllKeys
// [○] id, name 以外に age も持ってるからOK
assert.doesNotHaveAllKeys(obj, ['id', 'name']);
// [×] id, name, age を過不足なく全て持ってるからNG
assert.doesNotHaveAllKeys(obj, ['id', 'name', 'age']);
//-----------------------------
// containsAllKeys
// [○] id も name も持ってるからOK
assert.containsAllKeys(obj, ['id', 'name']);
// [×] aaa は持ってないからNG
assert.containsAllKeys(obj, ['id', 'aaa']);