@@ -647,61 +647,50 @@ describe('dropUndefinedKeys()', () => {
647
647
} ) ;
648
648
649
649
describe ( 'objectify()' , ( ) => {
650
- it ( 'turns undefined and null into `String` objects' , ( ) => {
651
- const objectifiedUndefined = objectify ( undefined ) ;
652
- const objectifiedNull = objectify ( null ) ;
650
+ describe ( 'stringifies nullish values' , ( ) => {
651
+ it . each ( [
652
+ [ 'undefined' , undefined ] ,
653
+ [ 'null' , null ] ,
654
+ ] ) ( '%s' , ( stringifiedValue , origValue ) : void => {
655
+ const objectifiedNullish = objectify ( origValue ) ;
653
656
654
- // not string literals but instances of the class `String`
655
- expect ( objectifiedUndefined ) . toEqual ( expect . any ( String ) ) ;
656
- expect ( objectifiedNull ) . toEqual ( expect . any ( String ) ) ;
657
-
658
- expect ( objectifiedUndefined . valueOf ( ) ) . toEqual ( 'undefined' ) ;
659
- expect ( objectifiedNull . valueOf ( ) ) . toEqual ( 'null' ) ;
657
+ expect ( objectifiedNullish ) . toEqual ( expect . any ( String ) ) ;
658
+ expect ( objectifiedNullish . valueOf ( ) ) . toEqual ( stringifiedValue ) ;
659
+ } ) ;
660
660
} ) ;
661
661
662
- it ( 'wraps other primitives with their respective object wrapper classes' , ( ) => {
663
- // Note: BigInts are tested separately in order to be able to restrict the Node version on which the tests run
664
- const numberPrimitive = 1121 ;
665
- const stringPrimitive = 'Dogs are great!' ;
666
- const booleanPrimitive = true ;
667
- const symbolPrimitive = Symbol ( 'Maisey' ) ;
668
-
669
- const objectifiedNumber = objectify ( numberPrimitive ) ;
670
- const objectifiedString = objectify ( stringPrimitive ) ;
671
- const objectifiedBoolean = objectify ( booleanPrimitive ) ;
672
- const objectifiedSymbol = objectify ( symbolPrimitive ) ;
673
-
674
- // not literals but instances of the respective wrapper classes
675
- expect ( objectifiedNumber ) . toEqual ( expect . any ( Number ) ) ;
676
- expect ( objectifiedString ) . toEqual ( expect . any ( String ) ) ;
677
-
662
+ describe ( 'wraps other primitives with their respective object wrapper classes' , ( ) => {
678
663
// TODO: There's currently a bug in Jest - if you give it the `Boolean` class, it runs `typeof received ===
679
664
// 'boolean'` but not `received instanceof Boolean` (the way it correctly does for other primitive wrappers, like
680
665
// `Number` and `String). (See https://github.com/facebook/jest/pull/11976.) Once that is fixed and we upgrade jest,
681
666
// we can comment the test below back in. (The tests for symbols and bigints are working only because our current
682
667
// version of jest is sufficiently old that they're not even considered in the relevant check and just fall to the
683
668
// default `instanceof` check jest uses for all unknown classes.)
684
669
685
- // expect(objectifiedBoolean).toEqual(expect.any(Boolean));
686
- expect ( objectifiedSymbol ) . toEqual ( expect . any ( Symbol ) ) ;
670
+ it . each ( [
671
+ [ 'number' , Number , 1121 ] ,
672
+ [ 'string' , String , 'Dogs are great!' ] ,
673
+ // ["boolean", Boolean, true],
674
+ [ 'symbol' , Symbol , Symbol ( 'Maisey' ) ] ,
675
+ ] ) ( '%s' , ( _caseName , wrapperClass , primitive ) => {
676
+ const objectifiedPrimitive = objectify ( primitive ) ;
687
677
688
- expect ( objectifiedNumber . valueOf ( ) ) . toEqual ( numberPrimitive ) ;
689
- expect ( objectifiedString . valueOf ( ) ) . toEqual ( stringPrimitive ) ;
690
- expect ( objectifiedBoolean . valueOf ( ) ) . toEqual ( booleanPrimitive ) ;
691
- expect ( objectifiedSymbol . valueOf ( ) ) . toEqual ( symbolPrimitive ) ;
692
- } ) ;
678
+ expect ( objectifiedPrimitive ) . toEqual ( expect . any ( wrapperClass ) ) ;
679
+ expect ( objectifiedPrimitive . valueOf ( ) ) . toEqual ( primitive ) ;
680
+ } ) ;
693
681
694
- // `BigInt` doesn't exist in Node < 10.
695
- testOnlyIfNodeVersionAtLeast ( 10 ) ( 'wraps bigints with the `BigInt` class ' , ( ) => {
696
- // Hack to get around the fact that literal bigints cause a syntax error in older versions of Node, so the
697
- // assignment needs to not even be parsed as code in those versions
698
- let bigintPrimitive ;
699
- eval ( 'bigintPrimitive = 1231n;' ) ;
682
+ // `BigInt` doesn't exist in Node < 10, so we test it separately here .
683
+ testOnlyIfNodeVersionAtLeast ( 10 ) ( 'bigint ' , ( ) => {
684
+ // Hack to get around the fact that literal bigints cause a syntax error in older versions of Node, so the
685
+ // assignment needs to not even be parsed as code in those versions
686
+ let bigintPrimitive ;
687
+ eval ( 'bigintPrimitive = 1231n;' ) ;
700
688
701
- const objectifiedBigInt = objectify ( bigintPrimitive ) ;
689
+ const objectifiedBigInt = objectify ( bigintPrimitive ) ;
702
690
703
- expect ( objectifiedBigInt ) . toEqual ( expect . any ( BigInt ) ) ;
704
- expect ( objectifiedBigInt . valueOf ( ) ) . toEqual ( bigintPrimitive ) ;
691
+ expect ( objectifiedBigInt ) . toEqual ( expect . any ( BigInt ) ) ;
692
+ expect ( objectifiedBigInt . valueOf ( ) ) . toEqual ( bigintPrimitive ) ;
693
+ } ) ;
705
694
} ) ;
706
695
707
696
it ( 'leaves objects alone' , ( ) => {
0 commit comments