From aeba6ac53ac485e3bd9aefe80f3bc321f419ed22 Mon Sep 17 00:00:00 2001 From: Rens Groothuijsen Date: Fri, 17 Apr 2020 21:30:33 +0200 Subject: [PATCH] Check for "deep" flag in oneOf --- lib/chai/core/assertions.js | 27 +++++++++++++++++++-------- test/expect.js | 1 + 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/chai/core/assertions.js b/lib/chai/core/assertions.js index 5c071fb72..c6f97fe0a 100644 --- a/lib/chai/core/assertions.js +++ b/lib/chai/core/assertions.js @@ -3150,7 +3150,8 @@ module.exports = function (chai, _) { var expected = flag(this, 'object') , flagMsg = flag(this, 'message') , ssfi = flag(this, 'ssfi') - , contains = flag(this, 'contains'); + , contains = flag(this, 'contains') + , isDeep = flag(this, 'deep'); new Assertion(list, flagMsg, ssfi, true).to.be.an('array'); if (contains) { @@ -3162,13 +3163,23 @@ module.exports = function (chai, _) { , expected ); } else { - this.assert( - list.indexOf(expected) > -1 - , 'expected #{this} to be one of #{exp}' - , 'expected #{this} to not be one of #{exp}' - , list - , expected - ); + if (isDeep) { + this.assert( + list.some(possibility => _.eql(expected, possibility)) + , 'expected #{this} to deeply equal one of #{exp}' + , 'expected #{this} to deeply equal one of #{exp}' + , list + , expected + ); + } else { + this.assert( + list.indexOf(expected) > -1 + , 'expected #{this} to be one of #{exp}' + , 'expected #{this} to not be one of #{exp}' + , list + , expected + ); + } } } diff --git a/test/expect.js b/test/expect.js index c3ce110e2..d1d1fe9e1 100644 --- a/test/expect.js +++ b/test/expect.js @@ -3308,6 +3308,7 @@ describe('expect', function () { expect([3, [4]]).to.not.be.oneOf([1, 2, [3, 4]]); var threeFour = [3, [4]]; expect(threeFour).to.be.oneOf([1, 2, threeFour]); + expect([]).to.be.deep.oneOf([[], '']); expect([1, 2]).to.contain.oneOf([4,2,5]); expect([3, 4]).to.not.contain.oneOf([2,1,5]);