前言

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

单元测试

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. 教你爱上Blocks(闭包)

    传值 Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数.通过Blocks,源代码中就能使用匿名函数,即不带名称的函数.在我们 的工作中,命名占据了很大一部分,函数名,变量名,属性名, ...

  2. xcode UIButton创建、监听按钮点击、自定义按钮 、状态 、内边距

    代码创建 //创建UIButton UIButton * btnType=[[UIButton alloc]init]; //设置UIControlStateNormal状态下的文字颜色 [btnTy ...

  3. c#高级语言编程(第一部分)

    1.一步一步学c#(一):.NET体系结构 2.一步一步学c#(二):核心c# 3.一步一步学c#(三):对象和类型 4.一步一步学c#(四):继承 5.一步一步学c#(五):泛型 6.一步一步学c# ...

  4. eclipse 中修改 M2_REPO的值

    转自: http://blog.csdn.net/xuechongyang/article/details/8267440 从eclipse中增加了maven2的插件之后,maven默认的本地库的路径 ...

  5. JavaScript之面向对象学习五(JS原生引用类型Array、Object、String等等)的原型对象介绍

    1.原型模式的重要性不仅仅体现在创建自定义类型方面,就连所有的原生的引用类型(Obejct.Array.String等等)都在构造函数的原型上定义方法和属性.如下代码可以证明: alert(typeo ...

  6. SQL学习之计算字段的用法与解析

    一.计算字段 1.存储在数据库表中的数据一般不是应用程序所需要的格式.大多数情况下,数据表中的数据都需要进行二次处理.下面举几个例子. (1).我们需要一个字段同时显示公司名和公司地址,但这两个信息存 ...

  7. org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Internal Server Error 错误

    Solr报错: { "responseHeader": { "status": 500, "QTime": 11 }, "erro ...

  8. MyEclipseアンロックの手順

    ↓ ↓ ↓ ↓ ↓ ↓

  9. HTTP 错误 401.3 - Unauthorized由于 Web 服务器上此资源的访问控制列表(ACL)解决办法

    对应站点目录的IUSR的权限没设造成的...在属性——>安全——> 高级 中把IUSR用户找出来添加好就OK了 注:IUSR(匿名访问 Internet 信息服务的内置帐户)

  10. java下拉框,滚动条

    package com.soft.test; /** * 下拉列表.下拉框.滚动条的使用 */ import javax.swing.*; import java.awt.*; public clas ...