constructor(config, context) {
    super(assertJestCircus27(config), assertExistingContext(context));

    /** @private */
    this._shouldManageDetox = detox.getStatus() === 'inactive';
    /** @private */
    this._timer = new Timer();

    /** @internal */
    this.testPath = path.relative(process.cwd(), context.testPath);
    /** @protected */
    this.testEventListeners = [];
    /** @protected */
    this.setupTimeout = detox.config.testRunner.jest.setupTimeout;
    /** @protected */
    this.teardownTimeout = detox.config.testRunner.jest.teardownTimeout;

    log.trace.begin(this.testPath);

    this.handleTestEvent = this.handleTestEvent.bind(this);
    this.setup = this._wrapSetup(this.setup);
    this.teardown = this._wrapTeardown(this.teardown);

    this.registerListeners({
      DetoxInitErrorListener,
      DetoxPlatformFilterListener,
      DetoxCoreListener,
      SpecReporter,
      WorkerAssignReporter,
      REPLListener,
    });

    // Artifacts flushing should be delayed to avoid conflicts with third-party reporters
    this.testEvents.on('*', this._onTestEvent.bind(this), 1e6);
  }
@see https://www.npmjs.com/package/jest-circus#overview