【没】コントローラアクションでtimetravelするやつ

Laravel勉強メモ

12/28追記

セッションが切れちゃうので何らかの対策を講じる必要がある

  • 例: LIFETIMEを1000年くらいにする

参考: ミドルウェアでtimetravelするやつ

[https://nextat.co.jp/staff/archives/245:embed:cite]

本格的

というかこれでいい これがいい

モチベーション

  • 時刻が関わる機能の自動テストをつくりたい

    • PHPだけのテストならCarbon::testNow()を呼ぶだけ
    • E2Eテストの場合、外(ブラウザ)から現在時刻を設定する口を開ける必要がある

つくった

[https://github.com/wand2016/timetravel-sample:embed:cite]

  • なんやかんやでCarbon::setTestNow()を環境別にラップするだけになった

    • 認証・認可後に入るコントローラアクション内でのタイムトラベルなので、ログインが解けちゃったりすることを考えなくていい
  • Laravelのタイムトラベリングがメインのはずだったのに、E2E自動テスト環境構築のほうが勉強になった説

    • jest + puppeteerは前からやってた
    • TypeScriptが加わった

振り返り

結論、良くない

  • コントローラアクションが散らかる
  • リクエストパラメータだけでタイムトラベルすると、PRGパターンが特に散らかる
  • cookieにタイムトラベル先日時を持ちたくなる
  • そうなると、もはやMiddlewareで統一的に処理したほうがいい