LoginSignup
2
2

More than 5 years have passed since last update.

Laravel 5.4/DuskブラウザテストにMacroでメソッドを追加する

Last updated at Posted at 2017-08-21

はじめに

LaravelではトレイトIlluminate\Support\Traits\Macroableを使用しているクラスはマクロによるメソッドの追加が可能な設計となっている。

Laravel\Dusk\Browserはそれを継承しているため、独自メソッドの登録が可能。
拡張クラスを作る必要が無いので継承関係がややこしいことにならない。
今回はDuskのブラウザテストでウインドウ(タブ)切り替えをするメソッドを追加してみた。

マクロを定義したファイルを作成

クロージャ―で定義するが、コール時にインスタンスがバインドされるようになっているので $thisが使用可能。

tests/Browser/Macros/Macros.php
Browser::macro('switchToLastTab', function() {
  // ウインドウがロードされるまで待つ
  $this->pause(1000);
  $handles = $this
              ->driver
              ->getWindowHandles();
  $this
    ->driver
    ->switchTo()
    ->window(end($handles));
  return $this;
});

AppServicePrpviderでマクロを登録

app\Providers\AppServiceProvider.php内のregisterメソッド内で先ほど作成したファイルをロードする。
require_onceなどでファイルをロードするだけ。
参考
https://laracasts.com/discuss/channels/tips/50-loading-form-macros

  public function register()
  {
    if ($this->app->environment('local', 'testing')) {
      // duskの登録
      $this->app->register(DuskServiceProvider::class);
      // ブラウザテスト用マクロを登録
      require_once(base_path('tests/Browser/Macros/Macros.php'));
    }
  }

呼び出す

  public function testHoge()
  {
    $this->browse(function ($browser) {
      $browser
        ->visit('/')
        ->clickLink('open window')
        ->switchToLastTab()
        ->assertTitleContains('Hoge');
    });
  }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2