关于单元测试 不自动注入model

本人单元测试小白,只能简单模拟下post请求

关于单元测试 不自动注入model

单元测试不使用中间件

关于单元测试 不自动注入model
导致控制器注入模型 $one 为空
正常的页面post的请求one是有值的

关于单元测试 不自动注入model

请问是哪里的问题?该怎么解决呢!谢谢各位!

、缪尔
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
chowjiawei
最佳答案

单元测试是测试你这个小模块,直接传入一个假的用户即可,不用依赖注入了

4年前 评论
丶缪尔 (楼主) 4年前
chowjiawei (作者) 4年前
丶缪尔 (楼主) 4年前
讨论数量: 2
chowjiawei

单元测试是测试你这个小模块,直接传入一个假的用户即可,不用依赖注入了

4年前 评论
丶缪尔 (楼主) 4年前
chowjiawei (作者) 4年前
丶缪尔 (楼主) 4年前

模型注入正好是一个中间件在做,正好你关闭了中间件,所以模型注入失效了。具体哪个中间件你得找找。另外,你应该把测试类型区分清楚,laravel tests 目录下有两种测试,你看目录名称,在Feature目录下的叫做特性测试,在Unit目录下的才叫单元测试。两种测试的用途是不同的。

单元测试

旨在通过自己构造的数据来测试大到单个类,小到单个方法,以此来测试关键部分不出问题。这里的关键部分,通常指的是你自己写的代码,所以单元测试不会帮你构造容器什么的,也就是说单元测试是完全把框架和你的代码隔离开来测试的。

特性测试(功能测试/验收测试)

特性测试旨在将你的代码与框架的代码合到一起测试。也就是你问题中使用路由来做的测试。这种测试的特点是它的测试范围覆盖了从接受请求到返回响应,相当于把整个请求处理过程当作黑盒来测试。因为这个特性,我也喜欢叫它验收测试。表示验收的时候跑一遍,没问题就是没问题了。

总结

所以你在验收测试里面如无特殊应该开启所有需要使用的框架功能。

———–更新—————————–
我刚看了一下,模型注入的中间件是\Illuminate\Routing\Middleware\SubstituteBindings::class

然后我猜了一下你的场景,你可能是需要在测试中忽略特定的中间件。这里分两种情况。

自己写的中间件

文档中说CSRF这个中间件会在测试的时候自动无效化,我跟进去看了下,发现它是直接判断当前执行环境。如果是测试环境它就会略过检查。所以,如果你要忽略的中间件是自己写的,那你就要通过在中间件里面检查环境来决定是否执行中间件的逻辑。

框架的中间件

我大概看了下 App\Http\Kernel::classIlluminate\Foundation\Http\Kernel::class,发现没有什么好的方法来做这个事情,所以你可能需要像 App\Http\Kernel::class 里面一样,使用手动注释这种本办法来忽略你不想跑的中间件。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!