【问题标题】:Phpunit testing Laravel 5.1 restful controllerPhpunit 测试 Laravel 5.1 restful 控制器
【发布时间】:2016-01-31 23:56:11
【问题描述】:

我已经在这个问题上停留了一段时间,没有其他关于 SO 的问题对我有帮助。

我正在使用 Laravel 5.1 和 phpunit 来测试一个 restful 控制器。我的测试代码如下所示:

$this->post('/api/book', [ 'title' => 'my book'])
  ->assertResponseOk();

并且目标控制器具有以下代码:

Log::debug('title: ' . $request->json('title'));

即在测试端,我希望使用TestCase::post() 方法发送请求,在服务器端,我希望使用Request::json() 方法从请求中读取。但是,当我查看日志时,我看到以下空字符串

[2015-10-31 17:26:01] testing.DEBUG: title:   

这表明我的测试代码没有在请求中设置正确的数据,或者我的服务器代码没有正确读取请求。顺便说一句,服务器也出现了进一步的故障,反映了日志中缺少的标题值。

我还使用a Firefox plugin, RESTClient 来手动测试我的网络应用程序,我必须正确设置正文(在title 键周围使用双引号,严格遵守JSON 规范)以确保服务器代码正常工作.所以确切的格式是我遵循的一个线索,到目前为止没有成功。

所以我的问题是,在 Laravel 5.1 中,最推荐用于测试和服务器端的 RESTful 控制器的代码是什么?

【问题讨论】:

    标签: php json rest laravel-5 laravel-5.1


    【解决方案1】:

    你的日志是空的原因是因为这个调用$request->json('title')实际上返回一个数组,而不是一个字符串。

    https://github.com/illuminate/http/blob/master/Request.php#L552

    获取密钥的正确方法是这样的:

    Log::debug('title: ' . $request->title);
    

    如此处所述:

    http://laravel.com/docs/5.1/requests#retrieving-input

    【讨论】:

    • 这听起来很有趣,当通过测试提交请求时,代码 $request->title 返回标题,而当通过我的浏览器插件提交请求时,代码 $request->json('title') 返回标题(和 $request->title如果我正确设置内容类型也可以)。感谢您的帮助,但这让我感到怀疑。特别是因为我从未听说过任何概念,例如HTTP request“输入”。
    • 对。我认为术语“输入”是指输入数据,如“表单输入”数据,我猜在休息环境中听起来有点不对劲,是的......
    猜你喜欢
    • 2016-11-28
    • 2014-06-06
    • 1970-01-01
    • 2015-03-24
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2015-08-25
    相关资源
    最近更新 更多