【问题标题】:Use visit() few times in one single test在一个测试中多次使用 visit()
【发布时间】:2018-04-03 12:15:09
【问题描述】:

我正在使用 BrowserKitTestCase 包测试我的 Laravel 5.5 应用程序。如果我在一个测试中多次使用 visit() 方法,我每次都会收到失败,例如:

/* @test */
function my_simple_test(){
    $this->visit('product/1')
        ->see('Product #1');

    $this->visit('product/2')
        ->see('Product #2'); // assertion fails
}

但同时通过了以下测试:

/* @test */
function my_simple_test_1(){
    $this->visit('product/1')
        ->see('Product #1');

/* @test */
function my_simple_test_2(){
    $this->visit('product/2')
        ->see('Product #2'); // assertion passes
}

是否有可能在同一个测试中多次使用 visit() ?以前在 Laravel 5.1 中是这样的。

更新: 如果我在同一个测试中使用visit() 两次,看起来页面被缓存并且在调用$this->visit('product/2') 我仍然看到来自/product/1 的数据。

UPDATE-2 只有当我使用不同的参数访问相同的路由时才会发生这种情况,通过如下测试:

/* @test */
function my_simple_test(){
    $this->visit('products')
        ->see('All Products');

    $this->visit('product/2')
        ->see('Product #2'); // assertion passes
}

【问题讨论】:

    标签: php phpunit laravel-5.5


    【解决方案1】:

    确实,控制器实例是按路由缓存的。

    要在同一个测试中以不同的参数调用相同的路由,应在调用之间重新启动应用程序:

    /* @test */
    function my_simple_test(){
        $this->visit('product/1')
            ->see('Product #1');
    
        $this->refreshApplication();
        $this->setUp();
    
        $this->visit('product/2')
            ->see('Product #2'); // assertion passes
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 2017-05-26
      • 2018-03-10
      • 2016-04-05
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多