function matchError(actual, expected, matchersUtil) {
      if (!j$.isError_(actual)) {
        return fail(expected, 'rejected with ' + matchersUtil.pp(actual));
      }

      if (!(actual instanceof expected.error)) {
        return fail(expected, 'rejected with type ' + j$.fnNameFor(actual.constructor));
      }

      const actualMessage = actual.message;

      if (actualMessage === expected.message || typeof expected.message === 'undefined') {
        return pass(expected);
      }

      if (expected.message instanceof RegExp && expected.message.test(actualMessage)) {
        return pass(expected);
      }

      return fail(expected, 'rejected with ' + matchersUtil.pp(actual));
    }
Expect a promise to be rejected with a value matched to the expected
@function
@async
@name async-matchers#toBeRejectedWithError
@since 3.5.0
@param {Error} [expected] - `Error` constructor the object that was thrown needs to be an instance of. If not provided, `Error` will be used.
@param {RegExp|String} [message] - The message that should be set on the thrown `Error`
@example
await expectAsync(aPromise).toBeRejectedWithError(MyCustomError, 'Error message');
await expectAsync(aPromise).toBeRejectedWithError(MyCustomError, /Error message/);
await expectAsync(aPromise).toBeRejectedWithError(MyCustomError);
await expectAsync(aPromise).toBeRejectedWithError('Error message');
return expectAsync(aPromise).toBeRejectedWithError(/Error message/);