こうこく
作 ▸
改 ▸

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']);
この記事に何かあればこちらまで (非公開)