Laravel正在尝试单元测试API JSON响应

在这里一次尝试学习太多的新事物(Laravel、PHPUnit等),所以这可能只是一个大脑疲劳的问题,仍然需要一些帮助

我有一个非常基本的“博客”项目,使用Laravel作为API层,AngularJS作为前端。我想对API端点进行单元测试,但在测试函数中,我很难弄清楚如何处理JSON

当我尝试运行testGetBlogPosts()时,我会看到CLI中的JSON输出,但我无法对JSON_decode()进行解码并检查对象的某些部分是否与预期结果匹配。在这里,我只想确保结果数组中第一个对象的ID是ID“1”

我从测试中得到的结果是:
1) ExampleTest::testGetBlogPosts
ErrorException:尝试获取非对象的属性

非常感谢您的任何帮助或建议

TL;DR:测试用例未正确处理来自API端点的JSON响应

控制器

类HomeController扩展BaseController{
/*
|--------------------------------------------------------------------------
|默认主控制器
|--------------------------------------------------------------------------
|
|您可能希望使用控制器来代替闭包,或者在闭包之外使用控制器
|基于路由。太好了!下面是一个示例控制器方法
|开始。要路由到此控制器,只需添加路由:
|
|路由::获取('/','[email protected]');
|
*/
公共功能showWelcome()
{
返回视图::make('hello');
}
公共函数getBlogPosts()
{
$posts=Post::get()->take(5)->toJson();
//echo$posts;根据已接受的答案,返回NOT echo
返回$员额;
}
公共函数getSinglePost($postId)
{
$posts=Post::find($postId)->toJson();
//echo$posts;根据已接受的答案,返回NOT echo
返回$员额;
}
}

测试文件

类ExampleTest扩展了TestCase{
/**
*一个基本的功能测试示例。
*
*@返回无效
*/
公共函数testBasicExample()
{
$crawler=$this->client->请求('GET','/');
$this->assertTrue($this->client->getResponse()->isOk());
}
公共函数testGetBlogPosts()
{
$response=$this->调用('GET','api/getBlogPosts');
$array=json_decode($response);
$result=false;
如果($array[0]->id==1)
{
$result=true;
}
$this->资产质量(true,$result);
}
}

根据要求,完整测试输出

[email protected]:/home/vagrant/Laravel/Homestead/Blog#phpunit phpunit
3.7.28作者:塞巴斯蒂安·伯格曼

从中读取的配置
/home/vagrant/Laravel/homestad/Blog/phpunit.xml

.E[{“id”:“1”,“user_id”:“1”,“title”:“这是一个测试
发布,“发布正文”:“测试测试”,“创建时间”:“2014-08-07
19:26:26,“更新时间”:“2014-08-07
19:26:26“},{“id”:“2”,“user_id”:“75”,“title”:“Libero rerum rem”
在doloribus asperiores的Praesenium et et.,“post_body”:“Commodi aut”
真实的美与自然的和谐
quis.,“创建时间”:“2014-08-07 19:26:26”,“更新时间”:“2014-08-07”
19:26:26“}]

时间:1.85秒,内存:18.50Mb

有1个错误:

1) ExampleTest::testGetBlogPosts ErrorException:尝试获取
非客体性

/home/vagrant/Laravel/homestad/Blog/app/tests/ExampleTest.php:22

失败!测试:2,断言:1,错误:1

如果我在浏览器中访问此端点,我会得到此信息

[
{
id:1,
用户id:1,
标题:“这是一个测试帖子”,
副标题:“,
帖子正文:“teststs”,
创建时间:“2014-08-07 19:26:04”,
更新地址:“2014-08-07 19:26:04”
},
{
id:2,
用户id:18,
标题:“临时劳动的权利。”,
副标题:“,
博文正文:“我是一个有尊严的人,我是一个温和的人。”,
创建时间:“2014-08-07 19:26:04”,
更新地址:“2014-08-07 19:26:04”
}
]

希望你现在已经明白了,但我用的是:

$array=json_decode($response->getContent())

发表评论