PHPUnit在本地工作,但某些测试在TravisCI上失败 - 状态代码[500]

时间:2018-05-30 13:36:20

标签: php laravel phpunit travis-ci

我目前正在运行一些测试,一切都在本地完美运行。一旦我在Travis上运行它我就会收到错误,但我无法解释自己的原因。

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

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

我尝试通过JSON或GET请求而不是使用Visit-Method来调用页面。没有任何成功。

特拉维斯错误

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 - administrators_can_visit_administrators_users_index

$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 个答案:

答案 0 :(得分:1)

问题正确存在于您尚未发布的代码中。问题是代码中处理的错误并转换为错误页面。在浏览器中访问页面时这很好,但在调试测试时不太好。您可以通过禁用异常处理程序来解决此问题。

在你的主testcase.php文件中添加这个函数:

public static int calculate(string number)
{
    var reverseNums = number.ToCharArray().Reverse().Select(c => c - '0').ToList();

    //Do whatever on the reverseNums    
}

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

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;
        }
    });
}

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