1. phpunit.xml 中添加 dingo 相关配置

<env name="API_STANDARDS_TREE" value="x"/>
<env name="API_SUBTYPE" value="prime"/>
<env name="API_VERSION" value="v1"/>
<env name="API_DEFAULT_FORMAT" value="json"/>
<env name="API_STRICT" value="false"/>
<env name="API_PREFIX" value="api"/>

2. dingo 的路由配置文件包含不能使用 require_once。

否则, 可能会出现一种情况是, phpunit 中第一个请求成功了, 但是后面的请求都 404。

这里涉及到的一个知识点是:laravel 或 lumen phpunit 中每一个 test 都会使用独立的  Application 以及 TestCase 实例来运行,我们知道,框架在初始化的时候会加载路由的配置,如果我们的进程只跑一遍,这样其实没什么问题。

但是,phpunit 中的 TestCase 是,一个进程,然后一个 TestCase 里面有多少 test 方法,就会进行多少次框架的初始化操作,这样问题就出现了,后续的请求中,require_once 不能再读取到任何配置信息,因此导致了后续请求全部 404 了。

所以需要使用 require 代替 require_once。

知识点:同一个进程中,require_once 只有第一次 require 会执行文件里面的内容,后续 require 不再加载文件。

3. 在测试中添加以下方法调用

1. phpunit.xml 中添加 dingo 相关配置
<env name="API_STANDARDS_TREE" value="x"/>
<env name="API_SUBTYPE" value="prime"/>
<env name="API_VERSION" value="v1"/>
<env name="API_DEFAULT_FORMAT" value="json"/>
<env name="API_STRICT" value="false"/>
<env name="API_PREFIX" value="api"/> 2. dingo 的路由配置文件包含不能使用 require_once
否则, 可能会出现一种情况是, phpunit 中第一个请求成功了, 但是后面的请求都 404 3. 在测试中添加以下方法调用
public function setUp()
{
parent::setUp(); // 跳过 api 验证
$user = \Modules\User\Models\User::with(['company'])->find(61339);
$this->actingAsApi($user);
} /**
* Sets the API user.
*
* @param mixed $user
* @return $this
*/
protected function actingAsApi($user)
{
// mock service middleware
/** @var Mockery\Mock $auth */
$auth = Mockery::mock('Dingo\Api\Http\Middleware\Auth[handle]',
[
Mockery::mock('Dingo\Api\Routing\Router'),
Mockery::mock('Dingo\Api\Auth\Auth'),
]);
$auth->shouldReceive('handle')
->andReturnUsing(function ($request, \Closure $next) {
return $next($request);
});
$this->app->instance('Dingo\Api\Http\Middleware\Auth', $auth);
$auth = Mockery::mock('Dingo\Api\Auth\Auth[user]',
[
app('Dingo\Api\Routing\Router'),
app('Illuminate\Container\Container'),
[],
]);
$auth->shouldReceive('user')
->andReturnUsing(function () use ($user) {
return $user;
});
$this->app->instance('Dingo\Api\Auth\Auth', $auth); return $this;
}

  

lumen 使用 dingo API 在 phpunit 中 404 的解决方法, 以及鉴权问题的更多相关文章

  1. SpringMVC中404错误解决方法总结

    在新手配置Spring MVC的时候,感觉都弄好了之后,运行起来却显示404错误. 网上对出现404的问题不同情况,都有了解决方法,前几天我也遇到了这个问题,顺便把这些问题总结一下. 解决问题最重要的 ...

  2. Sublime Text 2/3中Autoprefixer失效解决方法

    ###Sublime Text 2/3中Autoprefixer失效解决方法: 相信每个前端er都会使用Subl这款工具吧,因为它有上千款开源的插件,而且功能各异,这里给大家带来的是标题中Autopr ...

  3. CAS SSO:汇集配置过程中的错误解决方法

    本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...

  4. 关于获取URL中传值的解决方法--升级版

    这次页面之间的传值是升级版本,为什么是升级版本呢,因为这次页面的传值不一样了.大家可以看一下我原来的文章<关于获取URL中传值的解决方法> 其实上次就已经比较清楚的介绍了页面之间的传值,但 ...

  5. Spring自动扫描无法扫描jar包中bean的解决方法(转)

    转载自:http://www.jb51.net/article/116357.htm 在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.sprin ...

  6. error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法

    1 问题还原 这里我有三个源文件:Base.hpp, Base.cpp 和 main.cpp 在Base.hpp里面定义一个基类,注意,基类只包含构造函数和析构函数的声明,函数在Base.cpp里实现 ...

  7. 【FAQ】运动健康服务REST API接口使用过程中常见问题和解决方法总结

    华为运动健康服务(HUAWEI Health Kit)为三方生态应用提供了REST API接口,通过其接口可访问数据库,为用户提供运动健康类数据服务.在实际的集成过程中,开发者们可能会遇到各种问题,这 ...

  8. 深入理解k8s中的访问控制(认证、鉴权、审计)流程

    Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...

  9. IIS HTTP 错误 404.17 - Not Found HTTP 错误 404.2 解决方法

    出现这种情况的原因通常是因为先安装了Framework,后安装的IIS: 解决方法 运行cmd,输入: C:\Windows\Microsoft.NET\Framework\V4.0.30319\as ...

随机推荐

  1. string类型的常用方法

    1. 在尾部插入/删除元素 string s("hello"); // 插入/删除一个字符 s.push_back('!'); s.pop_back(); // 插入多个字符 s. ...

  2. Scrum立会报告+燃尽图(十二月十日总第四十一次):用户推广

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484 项目地址:https://git.coding.net/zhang ...

  3. 实验二 Java面向对象程序化设计

    实验二 Java面向对象程序设计 一.  实验要求 1.完成实验.撰写实验报告,以博客方式发表在博客园 2.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...

  4. 1、数据库与excel表格的数据导入导出

    1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.

  5. web01-helloworld

    新建一个Java web项目,名字为web01 在项目中新建一个servlet,名字为SimpleHello 修改doGet()方法,为: public void doGet(HttpServletR ...

  6. spring冲刺第二天

    昨天查找了安卓开发的相关资料以及炸弹人游戏的资料. 由于今天课程比较多,只在晚上将安卓开发环境配置完成. 在安装软件时环境配置出现了问题,不过问过同学后成功解决.

  7. Myeclipse(2014)项目的注释乱码

    (之前都是在项目右键 propertits----resource---text file encoding 里面改成UTF-8的 下面是以后都直接换) window->preference-& ...

  8. What is ASP.NET SignalR

    什么是ASP.NET SignalR ASP.NET SignalR是ASP.NET开发人员的新库,它使得为应用程序添加实时Web功能变得非常简单. 什么是“实时网络”功能?它能够让您的服务器端代码实 ...

  9. 结对项目:四则运算web

    1)Coding.Net项目地址 https://git.coding.net/DandelionClaw/WEB_Calculator.git 注:本项目为web端,并且需要连接SQL Server ...

  10. C++编译与链接(0)-.h与.cpp中的定义与声明

    C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须 ...