[单元测试:如何模拟在Lumen中具有路由参数的请求

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

我使用Lumen创建了一个API,现在我也将创建测试方法。好的,我知道在TDD中可能是相反的方式。

我的API的init(Request $request)方法带有注入的Request对象。为了测试其工作原理,我必须创建一个模拟请求。我是这样的:

$req = new Request([], [], ['param' => 'foo']);

看起来不错,但是Request对象已初始化为空对象。之后,我尝试检查路由参数:

dd($req->route('param'));

但是它产生空值;我花了几个小时找出答案并用谷歌搜索了一个解决方案,但没有找到任何东西。

任何想法?

laravel api phpunit lumen
1个回答
0
投票

问题是\Illuminate\Http\Request中的第三个参数不是您应该传递路线参数的地方。如果您看一下该类,您会发现第三个参数是自定义属性(我不知道它到底是什么)。

要模拟请求,您可以使用create中的方法\Illuminate\Http\Request

例如路线是Route::post('/users/{user}', 'UsersController@store')

$request = Request::create('/users/1', 'POST', [
    'name' => 'john doe',
]);

dd($request->route('user')); // 1

这里是详细信息:

/**
 * Creates a Request based on a given URI and configuration.
 *
 * The information contained in the URI always take precedence
 * over the other information (server and parameters).
 *
 * @param string               $uri        The URI
 * @param string               $method     The HTTP method
 * @param array                $parameters The query (GET) or request (POST) parameters
 * @param array                $cookies    The request cookies ($_COOKIE)
 * @param array                $files      The request files ($_FILES)
 * @param array                $server     The server parameters ($_SERVER)
 * @param string|resource|null $content    The raw body data
 *
 * @return static
 */
public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
    ....
}
© www.soinside.com 2019 - 2024. All rights reserved.