async run(urlToTest, options = {}) {
    const {
      strategy = 'mobile',
      locale = 'en_US',
      categories = ['performance', 'accessibility', 'best-practices', 'seo'],
    } = options;
    const url = new this._URL(this._endpointURL);
    url.searchParams.set('url', urlToTest);
    url.searchParams.set('locale', locale);
    url.searchParams.set('strategy', strategy);
    url.searchParams.set('key', this._apiKey);
    categories.forEach(category => url.searchParams.append('category', category));

    const response = await this._fetch(url.href);
    const body = await response.json();
    if (body.lighthouseResult) return body.lighthouseResult;

    if (body.error) {
      const {code = 'UNKNOWN', message = 'Unknown reason'} = body.error;
      const error = new Error(`PSI Failed (${code}): ${message}`);
      // @ts-ignore - append information to the error
      error.originalError = body.error;
      throw error;
    }

    throw new Error(`Unexpected PSI response: ${JSON.stringify(body)}`);
  }
@param {string} urlToTest
@param {{strategy?: 'mobile'|'desktop', locale?: string, categories?: Array<'performance' | 'accessibility' | 'best-practices' | 'seo'>}} [options]
@return {Promise<LH.Result>}