调用未定义方法IlluminateContainerContainer::getLocale() | Laravel



单元测试对我来说比功能测试更困难,我正试图编写一个与我的中间件相关的单元测试,但是出了什么问题?有人能帮我修复这个错误,或者为这个中间件写一个正常的单元测试吗?

我的中间件

<?php
namespace AppHttpMiddleware;
use AppServicesSettingsService;
use Closure;
use IlluminateHttpRequest;
use IlluminateSupportFacadesApp;
final class Locale
{
private SettingsService $settingsService;
public function __construct(SettingsService $settingsService)
{
$this->settingsService = $settingsService;
}
public function handle(Request $request, Closure $next): mixed
{
$locale = $this->settingsService->get('language', app()->getLocale());
app()->setLocale($locale);
return $next($request);
}
}

我的测试

<?php
namespace TestsUnit;
use AppHttpMiddlewareLocale;
use AppServicesSettingsService;
use IlluminateHttpRequest;
use PHPUnitFrameworkTestCase;
class LocaleMiddlewareTest extends TestCase
{
/**
* A basic unit test example.
*
* @return void
*/
public function test_example()
{
$request = new Request;
$settingsService = $this->getMockBuilder(SettingsService::class)->disableOriginalConstructor()->getMock();
$middleware = new Locale($settingsService);
$middleware->handle($request, function ($req) {
$this->assertEquals('en', app()->getLocale());
});
}
}

您应该使用TestsTestCase而不是PHPUnitFrameworkTestCase

//use PHPUnitFrameworkTestCase
use TestsTestCase;
class LocaleMiddlewareTest extends TestCase{

//.... other code
}

最新更新