前言

今天是第十三周周一,虽然接下来的时间会比较忙,比如各科的课设、考试、磨锤子。但是还是有种涅槃重生的感觉,昨晚的睡眠确实不怎么样,但是今天十分精神,已经想不起来多久没有这么早起了~让我累并快乐着吧!

单元测试

Laravel 中集成了PHPUnit, 测试的配置文件为根目录下的phpunit.xml,该配置文件为我们做好了所有配置工作。

安装

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit

实现简单测试

public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5');
}

其中 visit 方法用于访问指定路由页面,see 方法则判断返回响应中是否包含指定字符串。到项目根目录下运行:

phpunit

或者只测试某个文件:

./vendor/phpunit/phpunit/phpunit tests/XXXTest.php

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

Crawler 意为(网络)爬虫,Crawler 测试允许你在 web 应用中测试页面访问。下面是一些 Crawler 测试中常用的属性和方法:

$this->response:web应用返回的最后一个响应
$this->currentUri:当前访问的URL
visit($uri):通过GET请求访问给定URI
get($uri, array $headers = []):通过GET请求获取给定URI页面的内容,可以传递请求头信息(可选)
post($uri, array $data = [], array $headers = []):提交POST请求到给定URI
put($uri, array $data = [], array $headers = []):提交PUT请求到给定URI
patch($uri, array $data = [], array $headers = []):提交PATCH请求到给定URI
delete($uri, array $data = [], array $headers = []):提交DELETE请求到给定URI
followRedirects():根据最后响应进行任意重定向
see($text, $negate = false):断言给定文本在页面中是否出现
seeJson(array $data = null):断言响应中是否包含JSON,如果传递了$data,还要断言包含的JSON是否与给定的匹配
seeStatusCode($status):断言响应是否包含期望的状态码
seePageIs($uri):断言当前页面是否与给定URI匹配
seeOnPage($uri)和landOn($uri):seePageIs()的别名
click($name):使用给定body、name或者id点击链接
type($text, $element):使用给定文本填充输入框
check($element):检查页面上的checkbox复选框
select($option, $element):选择页面上下拉列表的某个选项
attach($absolutePath, $element):上传文件到表单
press($buttonText):通过使用给定文本的按钮提交表单
withoutMiddleware():在测试中不使用中间件
dump():输出最后一个响应返回的内容

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

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

$app:Laravel 5.1 应用实例
$code:Artisan命令返回的最后一个码值
refreshApplication():刷新应用。该操作由TestCase的setup()方法自动调用
call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null):调用给定URI并返回响应
callSecure($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null):调用给定HTTPS URI并返回响应
action($method, $action, $wildcards = [], $parameters = [], $cookies = [], $files = [], $server = [], $content = null):调用控制器动作并返回响应
route($method, $name, $routeParameters = [], $parameters = [], $cookies = [], $files = [], $server = [], $content = null):调用命名路由并返回响应
instance($abstract, $object):在容器中注册对象实例
expectsEvents($events):指定被给定操作触发的事件列表
withoutEvents():无需触发事件模拟事件调度
expectsJobs($jobs):为特定操作执行被调度的任务列表
withSession(array $data):设置session到给定数组
flushSession():清空当前session中的内容
startSession():开启应用Session
actingAs($user):为应用设置当前登录用户
be($user):为应用设置当前登录用户
seeInDatabase($table, array $data, $connection = null):断言给定where条件在数据库中存在
notSeeInDatabase($table, $array $data, $connection = null):断言给定where条件在数据库中不存在
missingFromDatabase($table, array $data, $connection = null):notSeeInDatabase()的别名
seed():填充数据库
artisan($command, $parameters = []):执行Artisan命令并返回码值

Laravel 5.1 中 PHPUnit 的断言方法

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

assertPageLoaded($uri, $message = null):断言最后被加载的页面;如果加载失败抛出异常:$uri/$message
assertResponseOk():断言客户端返回的响应状态码是否是200
assertReponseStatus($code):断言客户端返回的响应状态码是否和给定码值相匹配
assertViewHas($key, $value = null):断言响应视图包含给定数据片段
assertViewHasAll($bindings):断言视图包含给定数据列表
assertViewMissing($key):断言响应视图不包含给定数据片段
assertRedirectedTo($uri, $with = []):断言客户端是否重定向到给定URI
assertRedirectedToRoute($name, $parameters = [], $with = []):断言客户端是否重定向到给定路由
assertRedirectedToAction($name, $parameters = [], $with = []):断言客户端是否重定向到给定动作
assertSessionHas($key, $value = null):断言session包含给定键/值
assertSessionHasAll($bindings):断言session包含给定值列表
assertSessionHasErrors($bindings = []):断言session包含绑定错误
assertHasOldInput():断言session中包含上一次输入

Laravel 单元测试的更多相关文章

  1. phpstorm laravel单元测试 配置

    laravel中集成了单元测试工具phpunit可以在项目的根目录下进行使用,命令是:phpunti ./tests/单元测试文件名称.在phpstorm中使用phpunit需要做一些配置,指定com ...

  2. Laravel 单元测试-模拟认证的用户

    在 Laravel 编写单元测试时经常会遇到需要模拟认证用户的时候,比如新建文章.创建订单等,那么在 Laravel unit test 中如何来实现呢? 官方解决方法 Laravel 的官方文档中的 ...

  3. laravel 单元测试设置模拟时间

    有时候我们需要对一些超时的逻辑进行测试,需要等待一定的时间来验证超时逻辑是否生效. Carbon 库提供了 setTestNow 方法来设置一个虚拟的当前时间 使用这个特性的前提是:我们的待测试代码利 ...

  4. 【Gamma】Scrum Meeting 1 & 与助教谈话

    前言 Gamma阶段第1次会议在5月26日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 用户控制器解耦和注释 用户控制器解耦和注释 周国 ...

  5. laravel进行单元测试的时候如何模拟数据库以及mockery的调用

    单元测试是独立的,所谓的独立是指有独立的运行容器,独立的数据库. 这样做有什么好处呢? (1). 不会跟正常的容器产生冲突,继而影响正常业务. (2). 数据库独立防止数据被修改影响单元测试结果. 这 ...

  6. 【技术博客】 Laravel 5.1单元测试(PHPUnit)入门

    目录 Laravel 5.1单元测试(PHPUnit)入门 简介 安装与配置 1. 安装 2. 配置 编写测试样例 1. 新建测试样例 2. 编写函数的测试 3. 编写Web功能测试 运行测试与查看结 ...

  7. laravel/lumen 单元测试

    Testing Introduction Application Testing Interacting With Your Application Testing JSON APIs Session ...

  8. PhpStorm 为 Laravel 搭建 PhpUnit 单元测试环境

    1.PhpStorm 中打开项目的路径为 Laravel 安装的根目录 2.点击右下角 EventLog 提示按钮, 初始化 Composer 的设置 3.打开单元单测试示例类,按提示点击 Fix . ...

  9. laravel 5.1 单元测试 Cannot modify header information 错误

    运行phpunit的时候加上参数 --stderr ./vendor/bin/phpunit --stderr

随机推荐

  1. nginx File not found 错误分析与解决方法

    使用php-fpm解析PHP,出错提示如下:"No input file specified","File not found",原因是php-fpm进程找不到 ...

  2. _.remove的用法

    var array = [1, 2, 3, 4]; var evens = _.remove(array, function(n) { return n % 2 == 0; }); console.l ...

  3. 漏掉的账目(用C语言去重)

    问题描述: 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输 ...

  4. JS把字符串转换为数字的方法

     方法: (1)Number(),强制类型转换,接受一个参数. (2)parseInt(),把字符串转换为整形数字,可以接受一个或两个参数,其中第二个参数代表转换的基数,能够正确的将二进制.八进制.十 ...

  5. C++中#include的工作原理

    大多数人可能对“#include”比较熟悉,因为我们写C/C++程序的时候都会写的字符串之一,但是它是具体怎么工作的?或者它的原理是什么呢? 可能不太熟悉,也有可能没有去关心过.我们只关心程序能否正确 ...

  6. oracle rac 安装脚本

    1. 配置/etc/hosts 网络 192.168.1.111 rac1 rac1.oracle.com192.168.1.182 rac1-vip 192.168.1.222 rac2 rac2. ...

  7. Android Listview切换动画,扩展到任意view切换之间动画实现

    添加布局如下: <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 ...

  8. python练习之list

    请用索引取出下面list的指定元素: # -*- coding: utf-8 -*- L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python' ...

  9. iOS 开发技巧

    快速移除键盘 之前一直是讲view的父类改成control,然后加一个全屏按钮,点击让键盘消失.这个方法要写好多代码,现在一个比较好的方法是重写一个下面的方法: - (void)touchesBega ...

  10. css3_note

    css3基础 css3选择器 属性选择器 属性选择器基本上IE7+都支持,可以放心的使用,参见caniuse [attr] [attr=val] [attr*=val] [attr^=val] [at ...