Symfony4框架中单元测试和接口测试中的一些小坑
前提说明:
symfony 版本 4.1.*,使用 composer create-project symfony/website-skeleton 进行安装。
目标:在一个单元测试用例中对当前工程中的接口进行测试。使用PHPUnit。
坑1(发送请求使用 browser-kit):
browser-kit 只能对当前的应用进行发送接口请求,而且请求是不经过 index.php 的。
这样导致的问题就是如果当前的应用都是按照官方的指导配置去配置的话,比如数据库连接配置在 .env 中,那么如果请求不经过 index.php 的话,就无法加载 .env 文件。解决方法就是将数据库连接配置在 config/packages/doctrine.yaml 文件中。好了,现在数据库的连接问题解决了。
新的问题又来了,你在项目路径下的 tests 文件夹中创建了一个测试文件,比如 HomeTest.php,那么该继承哪个基类呢?正确答案是这个 Symfony\Bundle\FrameworkBundle\Test\WebTestCase,同时还需要指定 client 需要启动哪个 kernel,文档上说要指定kernel 的话需要复写 Symfony\Bundle\FrameworkBundle\Test\KernelTestCase 这个类中的 getKernelClass 或 createKernel 方法,好了现在你已经在 HomeTest.php 中复写了 getKernelClass 方法,并且指定了返回你自己的 kernel,该如何进行调用呢?这里需要用到,后期静态绑定这个知识点了。正确答案是使用 self 进行调用。
可以使用 xdebug 进行调试,因为是在同一个进程中。
坑2(发送请求使用 curl):
比如使用 GuzzleHttp,这样发送出去的请求是一个真正的 http 请求,因此会完整的按照 http 请求方式去执行,如同一个真正的请求发过来。
这样是会经过 index.php 的,无需将数据库配置在 config/packages/doctrine.yaml 中。
但是,这样的话由于不是当前的进程,那么如果想使用 xdebug 是不可能的,因为 xdebug 一旦开启监听就会阻塞所有的 php-fpm 进程。
最新文章
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
- Spring中的JdbcTemplate使用
- 框架整合----------Hibernate、spring整合
- BZOJ 4518 征途
- php大力力 [033节] 随便看看:PHP程序员学习C++
- SSIS_TXT有规则资料导入到EXCEL
- 无法自动调试 未能调试远程过程。这通常说明未在服务器上启用调试 WCF 托管在IIS上
- 航频卫士APP截图
- MVC生成CheckBoxList并对其验证
- lucene倒排索引缓冲池的细节
- JS事件及其兼容用法
- VueJs笔记
- C语言随机点名程序
- web自动化测试python+selenium学习总结----python编辑器pycharm环境安装
- 自定义Hook
- Essay3.0发布,基于JavaScript的前后端同构博客系统
- vue的条件渲染和列表渲染介绍
- let命令和块级作用域
- cuffquant 定量的结果全部为-nan
- traceroute 排查 nginx 反向代理 配置
热门文章
- oracle的事务
- layer提示带文字
- BZOJ1005--[HNOI2008]明明的烦恼(树的prufer编码)
- 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&;&;最短路
- OVS报错:s1.mgmt: version negotiation failed (we support version 0x01, peer supports version 0x04) ovs-ofctl: s1: failed to connect to socket (Broken pipe)
- django 快速实现文件上传(四)
- nginx 实现高并发和高负载
- sentinel备忘
- highcharts 代码都对,但是不显示图片
- Django连接MySQL出错