从测试开始(一):创建项目和PHPUnit


之前的部分都是在讲环境搭建和工具使用,从本节开始,将正式开始开发博客项目:我们将会创建一个本系列教程余下部分都会使用的项目,并且使用测试驱动开发(TDD)的方式开发本项目,以此展现一个项目完整的开发流程。

1、创建博客项目

我们将遵循上一节提到的六步创建一个新 Laravel 5.1 项目的步骤,创建本节要用到的博客项目 —— blog。

首先,在本地主机安装应用骨架:

接下来,编辑 Homestead.yaml,添加站点信息及数据库信息:

然后运行 homestead provision 重新启动 Homestead 虚拟机。

在本地主机中,添加如下这行到 hosts 文件:

还是在本地主机中,运行如下命令本地安装 NPM 包:

然后到数据库中创建本项目的数据库 blog,之后编辑.env文件,修改数据库名称:

最后在浏览器中访问 http://blog.app 查看一切是否就绪。

2、运行 PHPUnit

Laravel 5.1 集成的单元测试(基于 PHPUnit)功能是开箱即用的,甚至还提供了一个简单的单元测试示例以确保使用 web 请求该应用是否返回期望的 200 响应状态码。

要运行 PHPUnit,在项目根目录下简单运行 phpunit 命令即可:

Laravel 提供的PHPUnit测试示例

如果执行 phpunit 命令报错:command not found 或者 permissions denied,前者可能是安装时有问题,phpunit 命令位于 Composer 安装目录下的 vendor/bin 目录中,而且该目录已经被添加到系统路径中;后者则是因为没有为 phpunit 设置正确的权限以致无权执行该命令。

要解决这两个问题,需要按以下步骤操作:

第一步——删除项目的 vendor 目录。

第二步——在项目根目录下使用 composer update 命令重新生成 vendor 目录。

注:以上步骤都在主机操作系统中操作,而不是在 Homestead 虚拟机中。
好了,就是这样,重新执行 phpunit 命令看看一切是否正常

Laravel 5.1 中的 PHPUnit 配置

在新创建的 Laravel 5.1 项目根目录下有一个 phpunit.xml 文件,该文件包含了 PHPUnit 的配置项。

查看 phpunit.xml 文件会看到测试文件位于 tests 目录下,该目录下默认已经有两个测试文件了:

  • ExampleTest.php —— 包含一个 testBasicExample() 测试,ExampleTest 继承自 TestCase
  • TestCase.php —— Laravel 测试类的基类。

下面我们来看看 ExampleTest.php 中的 testBasicExample() 方法:

该测试会访问应用首页并查看页面是否包含 Laravel 5,还有比这更简单的测试实现吗?!

TestCase 类提供了很多针对 Laravel 5.1 应用的方法和属性用于单元测试,此外还提供了很多断言方法和 Crawler 类型的测试。下面让我们来一一探究。

Laravel 5.1 中 Crawler 测试的方法和属性

Crawler 意为(网络)爬虫,Crawler 测试允许你在 web 应用中测试页面访问。

下面是一些 Crawler 测试中常用的属性和方法:

Laravel 5.1 提供给 PHPUnit 的方法和属性

下面是 Laravel 5.1 提供给 PHPUnit 使用的应用方法和属性:

上述这些方法和属性都可以在测试类中使用。

Laravel 5.1 中 PHPUnit 的断言方法

除了标准的 PHPUnit 断言方法(如 assertEquals()assertContains()assertInstanceOf() 等)之外,Laravel 5.1 还提供了很多额外的断言用于帮助编写 web 应用的测试用例:

关于测试方法的使用示例,可参考 Laravel 测试文档,下一节我们将继续探讨测试使用:如何使用Gulp进行TDD(测试驱动开发)


<< 上一篇: Homestead 和 Laravel 安装器

>> 下一篇: 从测试开始(二):使用Gulp实现自动化测试