Asked Dec 8th, 2018 2:19 a.m. 674 0 1
  • 674 0 1
0

Lỗi 302 khi viết unit test cho API Laravel

Share
  • 674 0 1

Mình đang tập viết API và mọi thứ chạy ổn rồi, hiện tại mình đang viết unit test cho API thì nó trả về lỗi 302, mình nghĩ là do chưa có access token nên auth nó đẩy về trang đăng nhập. Mọi người có cách nào giải quyết cái access token này trong khi viết test không nhỉ?

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Exceptions\AppException;
use Tests\Api;

class TicketTest extends TestCase
{
    public function testGetAllTicketsWithMiddleware()
    {
    	$response = $this->json('get', '/api/tickets');

        $response->assertStatus(401);
    }

    // Đoạn này đang bị return 302
    public function testGetAllTickets()
    {
    	$user = factory(\App\Models\User::class)->create();

    	$response = $this->actingAs($user, 'api')
    					->json('GET', '/api/tickets');

        $response->assertStatus(200)
		        ->assertJson([
		            'code' => AppException::ERR_NONE,
		        ]);
    }
}

1 ANSWERS


Answered Dec 8th, 2018 7:47 a.m.
Accepted
+4

Mình đoán trong file route api bạn đang để Route::middleware('auth:api') đúng không ? Mình nghĩ giờ chỉ cần vô hiệu hóa middleware là ok

Cách 1: Ở Laravel 5.3 có trait là WithoutMiddleware mình k biết trong version mới còn sử dụng được không nữa :-s https://laravel.com/docs/5.2/testing#disabling-middleware

Cách 2: Xử lí ở app/Http/Middleware/VerifyCsrfToken.php viết thêm 1 function xử lí là handle()

public function handle($request, Closure $next)
{
    if (env('APP_ENV') === 'testing') {
        return $next($request);
    }

    return parent::handle($request, $next);
}

Điều này sẽ ghi đè phương thức handle bên trong Illuminate\Foundation\Http\Middleware\VerifyCsrfToken

Share
Avatar Tobie @TuanAnh9996
Dec 8th, 2018 10:11 a.m.

thank bạn, tối về mình thử xem sao, mình cũng nghĩ là cái middleware auth api đấy nhưng lại chưa tìm đc cách để ko cần bỏ nó đi

+1
| Reply
Share
Avatar Tobie @TuanAnh9996
Dec 10th, 2018 1:49 a.m.

5.7 vẫn dùng được trait WithoutMiddleware nhé, ai bị như mình thì cho vào là được

+1
| Reply
Share
Avatar Michael Scofield @simple1805
Dec 10th, 2018 7:22 a.m.

@TuanAnh9996 Goodjob =)) Nhưng mình thấy cách 2 clear hơn

0
| Reply
Share
Avatar Tobie @TuanAnh9996
Dec 10th, 2018 8:03 a.m.

@huusu1996 à mình đang làm demo thôi nên dùng tạm cách 1, yêu cầu ko có đoạn này, mình cho thêm thôi 😄

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.