2016-05-07 6 views
0

Ich habe versucht, es zu googlen, aber ich habe die Antwort nicht gefunden. Ich habe eine Funktion, die ein Objekt erzeugt, das einen von zwei Schlüsseln haben könnte (sagen wir Schlüssel 'a' und Schlüssel 'b'). Ich 'erwarte', dass dieses Objekt nur EINEN der beiden Schlüssel enthält, nicht beide und sicherlich nicht gar keinen. Das Objekt muss den Schlüssel 'a' ODER 'b' enthalten.Nodejs Mocha Chai Erwarten Sie eine Taste oder eine andere

Wie erstellt man dieses "ODER" in Chai?

Antwort

1

Chai hat diesem Nischenfall nichts gewidmet.

Die Lösung ist, die Arbeit selbst zu tun und dann assert.isTrue() oder gleichwertig zu verwenden.

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' 
); 

Beachten Sie, dass ich dort für Lesbarkeit und Erweiterbarkeit optimiert habe. Wenn Sie für die Leistung eine Mikrooptimierung durchführen möchten und nur zwei Tasten haben, funktioniert dies ohne die Konstanten hasOne und hasBoth.

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

Es wäre sicherlich eine nette Funktion für Chai. Wie auch immer, danke für die Lösung. – Ernanirst

+0

Ich stimme zu. Keith Amus - Chai's Betreuer - ist ein sehr netter Typ und ich vermute, dass er dafür offen ist. Obwohl er Sie bitten könnte, den Patch zu senden, um es zu ermöglichen. https://github.com/chaijs/chai –