ツール 作 ▸ 2019-02-27 18:59 改 ▸ 2019-05-08 13:03 Chai の assert.hasAnyKeys, .hasAllKeys, .containsAllKeys #Node.js#Chai 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']);