gpt4 book ai didi

php - 如何重用 Dusk 测试浏览器实例?

转载 作者:可可西里 更新时间:2023-11-01 12:59:38 24 4
gpt4 key购买 nike

我在 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 个浏览器实例每个测试类。显然,这很快就会失控,尤其是当我在部署前运行所有测试时。

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

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

最佳答案

我觉得通常您会希望测试类中的每个测试都有一个新的浏览器实例,以便每个测试都以"new"状态开始。基本上服务于与 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();
}
}

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

关于php - 如何重用 Dusk 测试浏览器实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44657869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com