diff --git a/packages/expect/src/__tests__/asymmetric_matchers.test.js b/packages/expect/src/__tests__/asymmetric_matchers.test.js index 7f3259605fee..54a3760b7c76 100644 --- a/packages/expect/src/__tests__/asymmetric_matchers.test.js +++ b/packages/expect/src/__tests__/asymmetric_matchers.test.js @@ -142,6 +142,7 @@ test('ObjectContaining throws for non-objects', () => { test('StringContaining matches string against string', () => { jestExpect(stringContaining('en*').asymmetricMatch('queen*')).toBe(true); jestExpect(stringContaining('en').asymmetricMatch('queue')).toBe(false); + jestExpect(stringContaining('en').asymmetricMatch({})).toBe(false); }); test('StringContaining throws for non-strings', () => { @@ -153,11 +154,13 @@ test('StringContaining throws for non-strings', () => { test('StringMatching matches string against regexp', () => { jestExpect(stringMatching(/en/).asymmetricMatch('queen')).toBe(true); jestExpect(stringMatching(/en/).asymmetricMatch('queue')).toBe(false); + jestExpect(stringMatching(/en/).asymmetricMatch({})).toBe(false); }); test('StringMatching matches string against string', () => { jestExpect(stringMatching('en').asymmetricMatch('queen')).toBe(true); jestExpect(stringMatching('en').asymmetricMatch('queue')).toBe(false); + jestExpect(stringMatching('en').asymmetricMatch({})).toBe(false); }); test('StringMatching throws for non-strings and non-regexps', () => { diff --git a/packages/expect/src/asymmetric_matchers.js b/packages/expect/src/asymmetric_matchers.js index 84dff96a6520..717d5f552c05 100644 --- a/packages/expect/src/asymmetric_matchers.js +++ b/packages/expect/src/asymmetric_matchers.js @@ -193,6 +193,10 @@ class StringContaining extends AsymmetricMatcher { } asymmetricMatch(other: string) { + if (!isA('String', other)) { + return false; + } + return other.includes(this.sample); } @@ -218,6 +222,10 @@ class StringMatching extends AsymmetricMatcher { } asymmetricMatch(other: string) { + if (!isA('String', other)) { + return false; + } + return this.sample.test(other); }