@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby.wasmのE2Eテストをデバッグする

ruby.wasmにPlayWrightで書かれたE2Eテストがあります。 https://github.com/ruby/ruby.wasm/blob/84707d656d007577947ced6c14a9a33e3ffd4033/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/browser-script.spec.ts

テストに失敗したときに、次のようにタイムアウトエラーだけが表示されることがあります。

タイムアウトエラーのスクリーンショット

ロジック途中でエラーが起き、アサーションまで到達しないときによく起きます。 この情報から失敗の原因を突き止めるのは大変です。

PlayWrightではブラウザを起動し、その中でruby.wasmを実行しています。 JavaScriptRubyスクリプトデバッグプリントしても、ブラウザのコンソールに出力されます。 テストを実行しているコンソールには表示されません。

そこで、テストケースで次のようなイベントリスナーを設定します。

page.on("console", (msg) => console.log("LOG:", msg.text()));

実行しているページでコンソールへの出力があったら、テストの実行画面に出力します。 次のようにテスト実行画面でデバッグプリントの内容が確認できます。

テスト実行画面にデバッグプリントが表示されているスクリーンショット

この情報から、僕はResponse.urlにはリダイレクト後のURLが入っていることを期待していたのに、リダイレクト前のURLがとれたので上手く動いていないことがわかりました。