Laravel 5 PHPUnit 测试 json 帖子
Posted
技术标签:
【中文标题】Laravel 5 PHPUnit 测试 json 帖子【英文标题】:Laravel 5 PHPUnit test json post 【发布时间】:2016-07-28 19:03:03 【问题描述】:我正在尝试按照officiel doc 测试 JSON API。我知道问题来自给 POST 请求的数据数组。该测试适用于像['hello' => 'world']
这样的单级数组,所以显然 post 函数不能处理复杂的结构?我在这里做错了什么?
测试:
public function testInsert()
$this->post(
'/test',
[
'content' => 'Hello world!',
'count' => [
'a' => 12.345678,
'b' => 12.345678
],
'user' => [
'id' => 1
]
],
['contentType' => 'application/json']
)->seeJsonEquals([
'status' => true
]);
错误:
unknown:myapp nobody$ phpunit
PHPUnit 4.8.24 by Sebastian Bergmann and contributors.
E.
Time: 648 ms, Memory: 15.25Mb
There was 1 error:
1) APITest::testInsert
ErrorException: Invalid argument supplied for foreach()
/Users/nobody/myapp/vendor/laravel/framework/src/Illuminate/Support/Arr.php:487
/Users/nobody/myapp/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:231
/Users/nobody/myapp/tests/APITest.php:43
FAILURES!
Tests: 2, Assertions: 2, Errors: 1.
控制器:
public function store()
$user = User::find(Input::get('user.id'));
// TODO: Validate input using JSON schema
if (empty($user))
$errors[] = 'User does not exist.';
if (empty(Input::get('content')))
$errors[] = 'Content is empty.';
$a = Input::get('location.latitude');
if ($a < 15)
$errors[] = 'A out of range.';
$b = Input::get('location.longitude');
if ($b < 20)
$errors[] = 'B out of range.';
if (empty($errors))
$post = new Post();
$post->content = Input::get('content');
$post->count()->create([
'a' => $a,
'b' => $b
]);
$user->posts()->save($user);
$post->save();
return APIUtils::makeStatusResponse(true);
return APIUtils::makeStatusResponse(false, $errors);
【问题讨论】:
也发布你的控制器方法。 【参考方案1】:我使用laravel new myapp
命令重新安装了我的 Laravel 应用程序,现在一切正常。我假设问题来自使用 composer create-project --prefer-dist laravel/laravel may
进行的先前安装。
【讨论】:
以上是关于Laravel 5 PHPUnit 测试 json 帖子的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1 使用 JSON 的 API 的 PHPUnit 测试
Laravel 5.2 PHPUnit JSON Api 请求正文未设置
带有 JSON 请求的 Laravel/phpunit 测试丢失了重要的请求细节
如何在 PHPUnit / Laravel 中模拟 JSON 文件