Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: 音声書き出しe2eテスト #2473

Open
wants to merge 35 commits into
base: main
Choose a base branch
from

Conversation

Hiroshiba
Copy link
Member

@Hiroshiba Hiroshiba commented Jan 4, 2025

内容

エンジンモックを使った音声書き出しのテストを書いてみました。
実際の音声も手元にpullしたりダウンロードしたりすれば聞けます。

その他

ブラウザ内でのファイル書き込みをどうモックするかで悩みました。
最終的にbackendのwriteFileをDI(というよりもmock?)することで解決しました。

他の方法としてブラウザに標準的についてるFileHandleあたりを差し替えることもできるんですが、↓の用にいろいろ問題があったのでやめました。

  • PlaywrightはshowOpenFilePickerなどのファイル選択ダイアログをmockできない
  • showOpenFilePickerをDIして適当なFileHandlerを返すこともできるけど、FileHandler周りのテストをPlaywrightがサポートしていない
  • ブラウザ版backendのFileHandler周りの実装に直で依存してしまう
    • まだブラウザ版のファイル管理アーキテクチャが成熟しきったあとなら依存しても良さそう

あとテストをplaywrightではなくvitestのブラウザモードで実装するのも考えましたがやめました。
試したところvitest-browser-vueがまだ色々と対応していないのか、ファイルが読み込めてなさそうなエラーが出たので引き返しました。もうちょっと様子見になりそう。

0:36:48 [vite] Internal server error: At least one <template> or <script> is required in a single file component. C:/Users/hihok/Github/voicevox/src/components/App.vue

@Hiroshiba Hiroshiba requested a review from a team as a code owner January 4, 2025 15:24
@Hiroshiba Hiroshiba marked this pull request as draft January 4, 2025 15:25
@voicevox-preview-pages
Copy link

voicevox-preview-pages bot commented Jan 18, 2025

🚀 プレビュー用ページを作成しました 🚀

更新時点でのコミットハッシュ:370e2e9

@Hiroshiba Hiroshiba marked this pull request as ready for review March 1, 2025 15:41
@Hiroshiba Hiroshiba changed the title [wip] test: 音声書き出しe2eテスト test: 音声書き出しe2eテスト Mar 1, 2025
@Hiroshiba Hiroshiba requested a review from sevenc-nanashi March 1, 2025 15:42
Comment on lines -29 to +30
interrogativeUpspeak: false,
adjustPauseLength: true,
interrogativeUpspeak: true,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ポーズの長さを変えるのもテストしたかったのでモックを修正しました。

vowelLength: 1 - 1 / (accentPhrases.length + 1),
vowelLength: 1 - 1 / (accentPhrases.length + 2),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今のaccentPhrasesの数がaccentPhrases.lengthに入っていて、最初は0なので1 - 1/1になって0(ポーズの長さが0)になってしまってたので、+2にしてみました。

import { test, expect, Page } from "@playwright/test";
import { gotoHome, navigateToMain } from "../navigators";
import { getQuasarMenu } from "../locators";
import { mockShowSaveFileDialog, mockWriteFile } from "./utility";
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

window.backends関数のモックを作るにあたっていくつか妥協したポイントもあったのでコメント。
より良い解決策があれば試したいかも。

  • mockを戻せるように作ってない
    • 今モック化したのはダイアログ表示の部分と、ファイル書き出しの部分
    • ダイアログは表示した瞬間ハングするのと、ファイル書き出しもできないので、まあどちらも戻さなくても問題にならないかなと思い、とりあえずそのままにしています
    • 戻せるようにも作れそうだけど、汎用的に書くのは結構難しいかも(全部のモックを戻す関数を作るとかが難しそう)
  • 一般化していない
    • 他にモックを刺したかった時にさくっとモックをさせるように作れてない
    • 今のうちに共通化した方がいいかもだけど・・・良い方法がパッと思いつかなかったので一旦そのままにしています

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant