Yêu cầu thg 12 8, 2018 2:19 SA 665 0 1
  • 665 0 1
0

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

Chia sẻ
  • 665 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 CÂU TRẢ LỜI


Đã trả lời thg 12 8, 2018 7:47 SA
Đã được chấp nhận
+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

Chia sẻ
Avatar Tobie @TuanAnh9996
thg 12 8, 2018 10:11 SA

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

Avatar Tobie @TuanAnh9996
thg 12 10, 2018 1:49 SA

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

Avatar Michael Scofield @simple1805
thg 12 10, 2018 7:22 SA

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

Avatar Tobie @TuanAnh9996
thg 12 10, 2018 8:03 SA

@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 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí