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

问题描述 投票:0回答:1

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

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,
];

这解决了我在本地环境(宅基地)中使用CORS所面临的问题。不幸的是,现在我的测试在CircleCI中失败了。所以问题是我如何启用CORS内容,以便再次运行测试。

示例测试

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

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

cors automated-tests circleci
1个回答
0
投票

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

首先,我在测试中添加了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',
];

这解决了我的错误

© www.soinside.com 2019 - 2024. All rights reserved.