簡體   English   中英

如何重用 Dusk 測試瀏覽器實例?

[英]How to reuse a Dusk test browser instance?

我在 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 個瀏覽器實例。 顯然,這很快就會失控,尤其是當我在部署前運行所有測試時。

就我而言,每個測試類一個瀏覽器實例是可以接受的,但我不知道如何實現這一點。 所以這就是我要問的:

  • 是否可以在單個測試類中的測試函數之間記住/重用瀏覽器實例?
  • 如果是這樣,如何?

引用laravel文檔:

有時,您可能希望將某些內容綁定到僅應解析一次的容器中,並且應在后續調用容器時返回相同的實例:

$this->app->singleton('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

我覺得通常情況下,您希望測試類中的每個測試都有一個新的瀏覽器實例,以便每個測試都以“新鮮”狀態開始。 基本上與 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();
    }
}

我還沒有測試過這個,但本質上你正在創建一個靜態類屬性並為其分配一個登錄的瀏覽器實例。 然后,您可以在類中的所有測試方法中使用相同的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM