【问题标题】:How to reuse a Dusk test browser instance?如何重用 Dusk 测试浏览器实例?
【发布时间】:2017-06-20 15:59:23
【问题描述】:

我在 Laravel 5.4 框架上的项目,我正在使用 Dusk 进行浏览器测试。我有一个页面,其中有几个我想独立测试的部分,但是我遇到了一个问题,我必须为每个单独的测试启动一个新的浏览器实例、登录并导航到该页面。

public function testExample()
{
  $this->browse(function (Browser $browser) {
    $browser->loginAs(1)
            ->visit('/admin/dashboard')
            ->assertABC()
            ->assertXYZ();
  });
}

所以当我在class allTheThingsTest extends DuskTestCase 中有 4-5 个这样的实例时,我将生成 4-5 个浏览器实例每个测试类。显然,这很快就会失控,尤其是当我在部署前运行所有测试时。

就我而言,每个测试类一个浏览器实例是可以接受的,但我不知道如何做到这一点。所以这就是我要问的:

  • 是否可以在单个测试类中的测试函数之间记住/重用浏览器实例?
  • 如果是,怎么做?

【问题讨论】:

    标签: php laravel laravel-dusk


    【解决方案1】:

    我觉得通常你会希望你的测试类中的每个测试都有一个新的浏览器实例,以便每个测试都以“新”状态开始。基本上与 Laravel 的 DatabaseTransactions/RefreshDatabase 测试特性相同。

    但是,如果您不想每次/每种测试方法都登录,您可以尝试类似以下的操作:

    class ExampleTest extends DuskTestCase
    {
        /**
         * An single instance of our browser.
         *
         * @var Browser|null
         */
        protected static ?Browser $browser = null;
    
        /**
         * Get our test class ready.
         *
         * @return void
         */
        protected function setUp(): void
        {
            parent::setUp();
    
            if (is_null(static::$browser)) {
                $this->browse(function (Browser $browser) {
                    $browser->loginAs(1);
                    static::$browser = $browser;
                });
            }
        }
    
        /** @test */
        public function first_logged_in_use_case()
        {
            static::$browser->visit('/admin/dashboard')->assertABC();
        }
    
        /** @test */
        public function second_logged_in_use_case()
        {
            static::$browser->visit('/admin/dashboard')->assertXYZ();
        }
    }
    

    我没有对此进行测试,但实际上您正在创建一个静态类属性并为其分配一个已登录的浏览器实例。然后,您可以在类中的所有测试方法中使用相同的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2019-11-05
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多