--dryRun fails for navigate callbacks and startNavigation/endNavigation

オープン 初心者向け
#355 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
cli, typescript
領域
cli, testing-qa

調査の方向性

packages/cli/src/lib/commands/collect/utils/user-flow/user-flow.mock.ts の UserFlowMock から始めます。navigate は、requestor が関数である場合はそれを呼び出し、そうでなければ page.goto を呼び出すようにします。その後、startTimespan と endTimespan に倣って、ログ出力のみを行う no-op 形式の startNavigation と endNavigation メソッドを追加します。コールバック形式の navigate と startNavigation/endNavigation の両方を使う dry-run の e2e ケースが、レポートを書き出さず、プロトコルエラーも発生させずに完了すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug

Problem

collect --dryRun fails for any flow that navigates with a callback, or calls startNavigation/endNavigation. It fails before writing any report.

UserFlowMock (packages/cli/src/lib/commands/collect/utils/user-flow/user-flow.mock.ts) stands in for Lighthouse's UserFlow in a dry run:

  • navigate(requestor) always calls page.goto(requestor). When requestor is a function, as in flow.navigate(async () => page.click('a')), Chrome rejects it:

    ProtocolError: Protocol error (Page.navigate): Invalid parameters Failed to deserialize params.url - BINDINGS: mandatory field missing at position 50
    
  • It has no startNavigation or endNavigation methods. A flow that calls them, or a recording with startNavigation/endNavigation steps, cannot run.

Reproduction

user-flow 0.21.6, with no Lighthouse config:

// user-flows/click.uf.mts
export default {
  flowOptions: { name: 'Click' },
  interactions: async ({ flow, page, collectOptions }) => {
    await flow.navigate(collectOptions.url);
    await flow.navigate(async () => {
      await page.click('a');
    });
  },
};
npx user-flow collect --url https://example.com --ufPath ./user-flows --dryRun

flow.navigate(collectOptions.url) alone dry-runs fine.

Proposed fix

In UserFlowMock:

  • navigate: run the callback when requestor is a function, otherwise page.goto(requestor);
  • add startNavigation and endNavigation, which only log, like startTimespan and endTimespan.

Tests: a dry-run e2e case with a callback navigate and with startNavigation/endNavigation.

Context: these are how @push-based/lighthouse-soft-navigation measures soft navigations, so dry runs of those flows fail today.

主要言語
HTML
スター
131
フォーク
7
平均マージ
7時間 58分
マージ済み PR(30日)
42

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

push-based/user-flow のほかの issue

push-based/user-flow の issue をすべて見る

似ている issue

CLI の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。