[Laravel] 15 - REST API: sidebar with unit test
前言
实现一个博客的侧边栏的链接,然后顺便对其进行单元测试的过程。

Archives
一、视图中展示SQL结果
- 一条 sql 语句【查询】
select
year(created_at) year,
monthname(created_at) month,
count(*) published
from posts
group by year, month
order by created_at desc
- 对应的 ORM语句【测试】
$ php artisan tinker
App\Post::selectRaw('year(created_at) year, monthname(created_at) month, count(*) published')
->groupBy('year', 'month')
->get()
->toArray();
- 侧边栏链接的'视图'【展示】
<ol class="list-unstyled">
@foreach ($Archives as $stats)
<li>
<a href="#">{{ $stats['month'] }}</a>
</li>
@endforeach
</ol>
以上可以通过URL中的参数触发。
- URL中的时间参数解析【触发】
if ($month = request('month')) {
$posts->whereMonth('created_at', Carbon::parse($month)->month);
}
Ref: Laravel Carbon函数
也可以选择year和month一并解析,然后直接触发 ORM语句,如下:
$posts = Post::latest()
->filter(request(['month', 'year']))
->get();
二、static 在类中的延迟静态绑定
Ref: PHP static关键字的用法及注意点
延迟静态绑定:指允许在一个静态继承的上下文中引用被调用类。
延迟绑定的意思为:static::不再为定义当前方法所在的类,而是实际运行时所在的类。注:它可以用于(但不限于)静态方法的调用。

单元测试
一、测试过程
- 一次测试
[1] 调用 phpunit 命令。

[2] 对ExampleTest.php进行单元测试。

[3] 测试的代码:ExampleTest.php
class ExampleTest extends TestCase
{
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200); $this->get('/')->assertSee('The Bootstrap Blog');
}
}
- $factory 自动封装了testing & seeding
Ref: [Laravel] 08 - Auth & Data Migration
[1] 原封装
/*
|--------------------------------------------------------------------------
| Model Factories
|--------------------------------------------------------------------------
|
| Here you may define all of your model factories. Model factories give
| you a convenient way to create models for testing and seeding your
| database. Just tell the factory how a default model should look.
|
*/ $factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
[2] 根据自己的数据表修改内容

- 使用 $factory 进行 数据填充
[ExampleTest.php]
class ExampleTest extends TestCase
{
use DatabaseTransaction;
public function testBasicTest()
{
// 生成两条数据
$first = factory(Post::class)->create();
$second = factory(Post::class)->create([
'created_at' => \Carbon\Carbon::now()->subMonth()
]); // When I fetch the archives.
$Posts = post::archives();
// Then the response should be in the proper format.
$this->assertCount(2, $posts); # '断言'限定了只能为两条
}
}
运行这个单元测试:
$ phpunit tests/Unit/ExampleTest.php
$this->assertCount(...);
$this->assertCount(0, ['foo']); //判断数组长度是否为传入参数
$this->assertEquals(...);
$this->assertEquals([
[
"year" => $first->created_at->format('Y'),
"month" => $first->created_at->format('F'),
"published" => 1
],
[
"year" => $second->created_at->format('Y'),
"month" => $second->created_at->format('F'),
"published" => 1
],
], $posts);
如果,模型中返回的数据不符合条件,例如忘记了 orderByRaw,那么上述 assertEquals 就会报错。

[Laravel] 15 - REST API: sidebar with unit test的更多相关文章
- 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法
利用Laravel 搭建oauth2 API接口 要求 laravel 5.4以上 安装 $ composer require laravel/passport 在配置文件 config/app.ph ...
- [Laravel] 14 - REST API: Laravel from scratch
前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...
- Laravel POST请求API接口 使用validate表单验证返回欢迎页
突然遇到的问题 就是使用Laravel进行开发API接口的时候 发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...
- laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效
laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...
- laravel使用Dingo\Api通过response()->json()返回空对象
laravel使用Dingo\Api写接口跟android对接时,android一直反应解析错误,无法解析数据. { "status_code":200, "messag ...
- laravel 配置路由 api和web定义的路由的区别详解
1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...
- 【转】简单的 Laravel 5 REST API
Introduction Almost all successful internet based companies have APIs. API is an acronym for Applica ...
- Laravel 的 JSON API 接口自动化测试
Laravel 自带了两种测试类型 Feature Test: 功能测试.针对类似接口这种流程性的测试. Unit Test: 单元测试.针对单个函数这种输入输出结果的测试. 新建一个 Feature ...
- [Laravel] 10 - WEB API : wrapper
前言 一.常用的解决方案 React 前端 + PHP (Laravel) 后端 Such as "some exposure to WEB API’s and/or RESTful“. 使 ...
随机推荐
- Python 八大排序算法速度比较
这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
- c# 上传图片流,php端(laravel框架)接收处理方法
c# httppost方法 public struct PostFile { public string name; public string filename; public Stream bit ...
- ORACLE中的字符串替换 replce、regexp_replace 和 translate
一.语法 replace(str_source,str1,str2) 把 str_source 中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时,与下个作用相同 ...
- Linux和类Unix系统上5个最佳开源备份工具
一个好的备份最基本的目的就是为了能够从一些错误中恢复: 人为的失误 磁盘阵列或是硬盘故障 文件系统崩溃 数据中心被破坏等等. 所以,我为大家罗列了一些开源的软件备份工具. 当为一个企业选择备份工具的时 ...
- 构建第一个 Spring Boot 工程
Spring Boot概述 什么是Spring Boot 随着动态语言的流行,java的开发显得格外笨重,繁多的配置文件编写,低下的开发效率,复杂的部署流程以及第三方技术集成难度大. 在上述环境下Sp ...
- 树莓派(RespberryPi)安装手记
购买了两台树莓派,显示器接口是HDMI的,所以需要HDMI高清线连接到显示器,再加上SD卡做硬盘以及无线USB-WIFI,就可以玩一玩树莓派这个小东西了.以下是安装手记. 首先是制作“启动光盘”,其实 ...
- puppet应用案例
- 内存优化总结:ptmalloc、tcmalloc和jemalloc(转)
转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越 ...
- Kotlin VS Java:基本语法差异(转载)
5月18号,goole宣布Kotlin成为官方支持的开发语言以来,Kotlin语言社区,公众号,qq群等全面轰炸,本文是一篇译文,来自国外的一个用户,将给大家介绍,基础语法部分Kotlin和java之 ...
- xcode 报错 malloc: *** error for object 0x6c3c5a4: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug------d
大家有时候会遇到这个错误 malloc: *** error for object 0x******: incorrect checksum for freed object - object was ...