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

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

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

单元测试不使用中间件

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

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

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

、缪尔
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
chowjiawei
最佳答案

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

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

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

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

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

单元测试

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

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

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

总结

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

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

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

自己写的中间件

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

框架的中间件

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

3年前 评论

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