Cách mô phỏng sự phụ thuộc của yêu cầu trong Laravel

Khám phá cách mô phỏng phần phụ thuộc yêu cầu trong Laravel bằng trình trợ giúp ứng dụng và cách nó có thể giúp bạn viết mã sạch hơn và dễ kiểm tra hơn.

Giả lập đối tượng Yêu cầu trong Laravel

Bạn có nên thử đối tượng Request trong thử nghiệm của mình không? Tài liệu của Laravel khuyên bạn nên sử dụng các phương pháp kiểm tra HTTP khi có thể. Tất nhiên, điều này cũng sẽ tạo ra một yêu cầu với đối tượng Request và bạn sẽ có khả năng đặt hầu hết các giá trị bạn cần.

Tuy nhiên, đôi khi việc mô phỏng một yêu cầu khi kiểm tra có thể hữu ích. Ví dụ: khi bạn chỉ muốn kiểm tra một phương thức cụ thể chèn đối tượng Request chứ không phải toàn bộ chu trình yêu cầu.

Một trường hợp sử dụng khác mà tôi gặp phải là phương thức Livewire::test trong Livewire 2. Khi sử dụng phương thức này, một tham số REQUEST_URI ngẫu nhiên sẽ được tạo. Kết quả là, phương thức $request->route()->uri() trả về một cái gì đó như "testing-livewire/RgSVitlQnqYK9rT3nG7A", trong khi tôi cần một giá trị được mã hóa cứng như "items-for-sale" để trang cần tải.

Trong những trường hợp như vậy, bạn có thể mô phỏng đối tượng Request như thế này:

use App\Http\Livewire\SalePage;
use Illuminate\Http\Request;
use Livewire\Livewire;
use Mockery\MockInterface;

...

public function run_test(): void
{
    $this->mock(Request::class, function (MockInterface $mock): void {
    $mock->shouldReceive('route')
        ->andReturn(new class() {
                public function uri(): string
                {
                    return 'items-for-sale';
                }
            });
    });

    Livewire::test(SalePage::class)
            ->assertViewIs('livewire.sale-page');
}

Khi gọi $request->route()->uri() trong phương thức chèn đối tượng Request, bạn sẽ thấy giá trị "items-for-sale".< /span>

Trong trường hợp của tôi, đây là phương thức mount trong thành phần Livewire:

use Illuminate\Http\Request;

...

public function mount(Request $request)
{
    $slug = $request->route()?->uri();
}

Bằng cách này, bạn có thể đặt tất cả các giá trị cần thiết để vượt qua bài kiểm tra của mình.

#laravel 

Cách mô phỏng sự phụ thuộc của yêu cầu trong Laravel
1.50 GEEK