好的,如已经在评论中已经解释了一点,我们先回退一下,再考虑一下这种情况.

“My first step is to check that the /login controller is called on the home url.”

所以这意味着:当用户点击主路由时,您需要检查用户是否登录,如果不是,您需要将其重定向到登录名,或许有一些Flash消息.登录后,您要将其重定向到主页.如果登录失败,您需要将它们重定向到登录表单,也可能使用Flash消息.

所以有几件事要测试:家用控制器和登录控制器.所以遵循TDD的精神,让我们先创建测试.

注意:我将遵循phpspec使用的一些命名约定,但不要让你烦恼.

class HomeControllerTest extends TestCase

{

/**

* @test

*/

public function it_redirects_to_login_if_user_is_not_authenticated()

{

Auth::shouldReceive('check')->once()->andReturn(false);

$response = $this->call('GET','home');

// Now we have several ways to go about this,choose the

// one you're most comfortable with.

// Check that you're redirecting to a specific controller action

// with a flash message

$this->assertRedirectedToAction(

'AuthenticationController@login',null,['flash_message']

);

// Only check that you're redirecting to a specific URI

$this->assertRedirectedTo('login');

// Just check that you don't get a 200 OK response.

$this->assertFalse($response->isOk());

// Make sure you've been redirected.

$this->assertTrue($response->isRedirection());

}

/**

* @test

*/

public function it_returns_home_page_if_user_is_authenticated()

{

Auth::shouldReceive('check')->once()->andReturn(true);

$this->call('GET','home');

$this->assertResponSEOk();

}

}

这就是家庭控制器.在大多数情况下,您实际上不在乎您被重定向到哪里,因为这可能会随时间而变化,您将不得不更改测试.所以至少应该做的是检查你是否被重定向,只有检查更多的细节,如果你真的认为这是重要的测试.

我们来看看认证控制器:

class AuthenticationControllerTest extends TestCase

{

/**

* @test

*/

public function it_shows_the_login_form()

{

$response = $this->call('GET','login');

$this->assertTrue($response->isOk());

// Even though the two lines above may be enough,// you could also check for something like this:

View::shouldReceive('make')->with('login');

}

/**

* @test

*/

public function it_redirects_back_to_form_if_login_fails()

{

$credentials = [

'email' => 'test@test.com','password' => 'secret',];

Auth::shouldReceive('attempt')

->once()

->with($credentials)

->andReturn(false);

$this->call('POST','login',$credentials);

$this->assertRedirectedToAction(

'AuthenticationController@login',['flash_message']

);

}

/**

* @test

*/

public function it_redirects_to_home_page_after_user_logs_in()

{

$credentials = [

'email' => 'test@test.com',];

Auth::shouldReceive('attempt')

->once()

->with($credentials)

->andReturn(true);

$this->call('POST',$credentials);

$this->assertRedirectedTo('home');

}

}

再次,总是想想你真正想要测试的内容.你真的需要知道在哪个路由上触发哪个控制器动作?或者视图的名称被返回?实际上,您只需要确保控制器实际上尝试这样做.您传递一些数据,然后测试它是否按预期行为.

并且始终确保您不尝试测试任何框架功能,例如,如果特定路由触发特定操作或视图正确加载.这已经被测试了,所以你不需要担心.专注于您的应用程序的功能,而不是基础框架.

php 测试控制器,php – 控制器的Laravel单元测试相关推荐

  1. junit 测试mvc_Spring MVC控制器JUnit测试

    junit 测试mvc JUnit测试Spring MVC控制器并非易事 . 但是最近,一个新项目 (即将在Spring推出)提供了新的工具来简化此工作. 这篇文章说明了如何通过JUnit测试来测试一 ...

  2. jmeter使用if控制器_Jmeter(七)_if控制器+循环控制器+计数器控制接口分支

    最近查阅了一下网上关于if控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ...

  3. 测者的测试技术手册:AI的自动化单元测试

    测者的测试技术手册:AI的自动化单元测试 谈新技术:AI的自动化单元测试 转载于:https://www.cnblogs.com/mrtester/p/10107939.html

  4. iOS:使用block进行类与类,控制器与控制器之间的传值

    介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况 ...

  5. Asp.Net MVC控制器、控制器动作和动作结果

    原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...

  6. TwinCAT3之Ads通讯——1、控制器和控制器间通讯

    目录 1 简介 2 硬件连接 3.工程和配置 3.1 Ads Mast主工程 3.2 创建从机工程 4 Ads主机中读写操作测试 4.1 Mast读操作 4.2 Mast写操作 1 简介 ADS通讯是 ...

  7. html5控制plc,技术领先|环境因素对WAGO可编程逻辑控制器PLC控制器的影响

    可编程逻辑控制器于二十世纪六十年代初问世以来,在计算机.工业等方面,PLC控制器受到了极大的欢迎.更多的技术厂家都在关注着PLC控制器的现状和发展.想要在节约能源的前提下进一步发展可编程逻辑控制器显得 ...

  8. Jmeter 随机控制器-随机顺序控制器

    随机控制器 随机逻辑控制器的行为与交替控制器相似,不同之处在于它不是按顺序执行其中的请求,而是每次执行时,在控制的请求中随机一个. 随机控制器中,每个线程每次循环时,可能调用其中的一个请求,调用一个请 ...

  9. JMeter分布式负载测试(吞吐量控制器)

    在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划. 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载.这些网页包括: 主 ...

最新文章

  1. Linux centos7 NMAP网络探测工具安装过程以及使用示例!
  2. RHEL7 timedatectl命令
  3. Android配置build.gradle解锁更高逼格玩法(多版本共存、分服务器打包等)
  4. 最新最全的java多线程基础总结(上)
  5. Tomcat源码解析一:下载源码与导入eclipse
  6. 如何检测链表中是存在循环
  7. 10分钟做一个新闻问答web站点[iVX低代码实战]
  8. Linux 系统添加静态路由的方法
  9. 数字三角形(洛谷-P1118)
  10. Linux—JVM等性能调优监控
  11. php权限设置,php设置权限的方法
  12. STL_算法_元素计数(count、count_if)
  13. [七]JavaIO之 PipedInputStream 和 PipedInputStream
  14. 部署GitLab代码托管仓库
  15. marlin固件烧录教程_marlin固件中文(marlin固件下载)
  16. C# 使用NPIO 导出导出EXECL
  17. python-求m+mm+mmm+mmmm+ ...
  18. 四大开源3d游戏引擎探究(前言上)
  19. 用脑电波控制智能假肢:如何利用深度学习技术进行EGG数据分类
  20. FPGA实现DDRIP核配置(Memory Interface Solutions)

热门文章

  1. 1岁确诊脑瘫,“轮椅博士”,毕业了!
  2. ​【文末有福利】揭秘阿里中台!一文看懂阿里推荐业务的两项利器
  3. 最年轻图灵奖女性得主:谁说女的数学都比男的差
  4. 夜读丨72名研究生被清退:孩子,你前半生偷的懒,后半生得拼命还
  5. 丘成桐:年轻学者要敢于“无法无天”
  6. 平方变换法提取载波MATLAB,毕业设计(论文)MPSK信号的载波同步算法研究与仿真.doc...
  7. 图结构练习——最小生成树
  8. OpenTSDB 开发指南之 Grafana 展示OpenTSDB监控数据
  9. Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS
  10. 八种经典排序算法总结