代码之家  ›  专栏  ›  技术社区  ›  Stan Barrows

phpunit在本地工作,但在travisci上有些测试失败-状态代码[500]

  •  0
  • Stan Barrows  · 技术社区  · 6 年前

    我目前正在进行一些测试,所有的东西都在本地运行得很好。一旦我在特拉维斯上运行它们,我就得到一个错误,但我无法解释自己为什么。

    有趣的事实:例如,我在其他测试中使用相同的代码(只是有不同的路径),它可以在本地和travis上工作。

    Tests: 372, Assertions: 906, Failures: 1.
    

    我试图通过json或get请求而不是使用visit方法来调用页面。没有任何成功。

    特拉维斯误差

    1) Tests\Feature\Administrators\Users\UsersControllerTest::administrators_can_visit_administrators_users_index
    A request to [http://localhost:8000/backend/administrators/users] failed. Received status code [500].
    /home/travis/build/StanBarrows/ch.example/vendor/laravel/browser-kit-testing/src/Concerns/InteractsWithPages.php:220
    /home/travis/build/StanBarrows/ch.example/vendor/laravel/browser-kit-testing/src/Concerns/InteractsWithPages.php:92
    /home/travis/build/StanBarrows/ch.example/vendor/laravel/browser-kit-testing/src/Concerns/InteractsWithPages.php:73
    /home/travis/build/StanBarrows/ch.example/tests/Feature/Administrators/Users/UsersControllerTest.php:44
    

    测试1-管理员可以访问管理员用户索引

    $route = 'backend.administrators.users.index';
    $this->logInAs(null, 'administrator');
    $this->visitRoute($route);
    $this->assertResponseOk();
    $this->seeRouteIs($route);
    

    尝试的解决方法

    $this->call('GET', route($route));
    

    $this->visit(route($route))
    

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Michiel    6 年前

    这个问题存在于你没有在这里发布的代码中。问题是错误在代码中处理并转换为错误页。在浏览器中访问页面时,这是很好的,但在调试测试时就不是那么好了。您可以通过禁用异常处理程序来解决这个问题。

    在主testcase.php文件中添加以下函数:

    protected function disableExceptionHandling()
    {
        $this->oldExceptionHandler = $this->app->make(ExceptionHandler::class);
        $this->app->instance(ExceptionHandler::class, new class extends Handler {
            public function __construct() {}
            public function report(\Exception $e) {}
            public function render($request, \Exception $e) {
                throw $e;
            }
        });
    }
    

    然后,在失败的测试中,在测试顶部添加以下行:

    $this->disableExceptionHandling();
    

    你仍然会有错误,但会更清楚。