我在Laravel5.4框架上的项目,我正在使用黄昏进行浏览器测试。我有一个页面,有几个部分我想独立测试,但是我遇到了一个问题,我必须启动一个新的浏览器实例,登录,并导航到该页面,为每个单独的测试。
public function testExample()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(1)
->visit('/admin/dashboard')
->assertABC()
->assertXYZ();
});
}因此,当我在class allTheThingsTest extends DuskTestCase中有4-5个浏览器实例时,我会在每个测试类生成4到5个浏览器实例。显然,这很快就失控了,特别是在我运行所有的测试部署前。
就我而言,每个测试类都有一个浏览器实例是可以接受的,但我不知道如何实现这一点。所以我想问的是:
发布于 2021-01-27 15:49:34
我觉得典型的情况是,您需要为测试类中的每个测试提供一个新的浏览器实例,以便每个测试都处于“新”状态。基本上与Laravel的DatabaseTransaction/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();
}
}我还没有对此进行测试,但实际上您正在创建一个静态类属性,并将登录的浏览器实例分配给它。然后,您可以在类中的所有测试方法中使用相同的实例。
https://stackoverflow.com/questions/44657869
复制相似问题