如何从 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',
];
这解决了我的错误
最近我开始 运行 遇到 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',
];
这解决了我的错误