如何从 CircleCI 中启用 CORS 以支持自动化测试

How to enable CORS from within CircleCI to support automated testing

最近我开始 运行 遇到 CORS 问题,因为许多人在我面前很高兴。我能够使用以下设置解决我的本地环境的问题。目前,该应用程序仍在开发中,因此我知道我可能应该在发布该应用程序之前限制 CORS Origins。

CORS-中间件

    /**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    header('Access-Control-Allow-Origin: *');
    //ALLOW OPTIONS METHOD
    $headers = [
        'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin, Authorization',
    ];

    if ($request->getMethod() == "OPTIONS"){
        //The client-side application can set only headers allowed in Access-Control-Allow-Headers
        return response()->json('OK',200, $headers);
    }

    $response = $next($request);
    foreach ($headers as $key => $value) {
        $response->header($key, $value);
    }

    return $response;
}

内核

protected $middleware = [
    //Other middlewares
    \App\Http\Middleware\Cors::class,
];

这解决了我在本地环境 (homestead) 中遇到的 CORS 问题。不幸的是,现在我的测试在 CircleCI 中失败了。所以问题是我怎样才能启用 CORS 东西,以便我的测试再次 运行ning。

示例测试

public function test_we_can_retrieve_all_places() {
    $response = $this->get('api/places');
    $response
        ->assertStatus(200);
}

测试输出: 预期状态代码 200 但收到 500。 无法断言 false 为 true。

如果其他人可能遇到上述错误,以下步骤可帮助我解决问题。

首先,我在我的测试中添加了 dd($respone),它输出了很多不太有用的东西。但它也会转储可能的异常。下面是我发现的例外之一。

Laravel phpunit Cannot modify header information - headers already sent

为了解决这个问题,我将上面的代码调整为以下内容:

//ALLOW OPTIONS METHOD
$headers = [
    'Access-Control-Allow-Origin' => '*',
    'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
    'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin, Authorization',
];

这解决了我的错误