将 Laravel Input 属性注入 Mockery 会话对象

Posted

技术标签:

【中文标题】将 Laravel Input 属性注入 Mockery 会话对象【英文标题】:Inject Laravel Input property into Mockery session object 【发布时间】:2016-10-03 19:36:18 【问题描述】:

我正在开发一个现有的 Laravel 应用程序,并试图开始为它构建一个测试套件。我正在使用 Mockery 库来模拟我正在测试的类的依赖关系,但我遇到了一个似乎无法绕过的障碍。

$leadRepositoryInterface = m::mock('CRM\Storage\Lead\LeadRepositoryInterface');
$response = m::mock('ColorJar\ApiResponse\Response');

$object = new LeadsController($leadRepositoryInterface, $response);

运行上述代码时出现错误,因为 LeadsController 的父类检查 Input::all()[__currentUser] 并崩溃,因为 Input::all() 没有返回任何内容。

我需要为我系统中的任何用户设置 Laravel Input 外观变量(我确定我在那里误用了术语,抱歉),但我在 Mockery 文档中没有看到关于如何设置属性的任何地方一个模拟对象,我只看到如何设置期望和返回值。我该怎么做? Laravel 是否允许我设置 Input::all() 的返回值?

【问题讨论】:

【参考方案1】:

您不能模拟来自 Input 门面的响应,但您可以模拟底层类 Request。然后你会做这样的事情:

Request::shouldReceive('input->all')->andReturn('someValue');

【讨论】:

感谢您的回复。我不得不转移到另一个项目一段时间,但当我回到这个项目时我会试试这个。乍一看,这似乎适用于我的目的。谢谢!当我能够对此进行测试时,我会接受你的回答。

以上是关于将 Laravel Input 属性注入 Mockery 会话对象的主要内容,如果未能解决你的问题,请参考以下文章

C#单元测试--如何使用moq.mock进行依赖注入

使用 Mock 对 Laravel 5 Mail 进行单元测试

在 AngularJS/Jasmine 中注入 Mock 服务

如何模拟 laravel 辅助函数请求

Autofac 集成测试 在 ConfigureContainer 之后进行 Mock 注入

在 Spring 的构建后阶段之前注入 mock