function AsyncExpectation(options) {
      this.expector = new j$.Expector(options);

      const customAsyncMatchers = options.customAsyncMatchers || {};
      for (const matcherName in customAsyncMatchers) {
        this[matcherName] = wrapAsyncCompare(
          matcherName,
          customAsyncMatchers[matcherName],
        );
      }
    }
Asynchronous matchers that operate on an actual value which is a promise,
and return a promise.

Most async matchers will wait indefinitely for the promise to be resolved
or rejected, resulting in a spec timeout if that never happens. If you
expect that the promise will already be resolved or rejected at the time
the matcher is called, you can use the {@link async-matchers#already}
modifier to get a faster failure with a more helpful message.

Note: Specs must await the result of each async matcher, return the
promise returned by the matcher, or return a promise that's derived from
the one returned by the matcher. Otherwise the matcher will not be
evaluated before the spec completes.

@example
// Good
await expectAsync(aPromise).toBeResolved();
@example
// Good
return expectAsync(aPromise).toBeResolved();
@example
// Good
return expectAsync(aPromise).toBeResolved()
 .then(function() {
   // more spec code
 });
@example
// Bad
expectAsync(aPromise).toBeResolved();
@namespace async-matchers