在这里一次尝试学习太多的新事物(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())