首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重用Dusk测试浏览器实例?

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

Stack Overflow用户
提问于 2017-06-20 15:59:23
回答 1查看 909关注 0票数 18

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

代码语言:javascript
复制
public function testExample()
{
  $this->browse(function (Browser $browser) {
    $browser->loginAs(1)
            ->visit('/admin/dashboard')
            ->assertABC()
            ->assertXYZ();
  });
}

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

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

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

回答 1

Stack Overflow用户

发布于 2021-01-27 15:49:34

我觉得典型的情况是,您需要为测试类中的每个测试提供一个新的浏览器实例,以便每个测试都处于“新”状态。基本上与Laravel的DatabaseTransaction/RefreshDatabase测试特性相同。

但是,如果您不希望每次登录/每次测试方法,您可以尝试类似于以下内容:

代码语言:javascript
复制
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();
    }
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44657869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档