拉拉维尔 5.6。嘲讽。属性上的模拟方法

Posted

技术标签:

【中文标题】拉拉维尔 5.6。嘲讽。属性上的模拟方法【英文标题】:Laravel 5.6. Mockery. Mock method on property 【发布时间】:2018-12-17 12:39:07 【问题描述】:

目前我有类似的东西(简化版)

app(ShopifySDK::class)->Order->get($params)

如何模拟这个类并检查get() 方法输入?

这不起作用。

$this->app->bind(ShopifySDK::class, function () 
            return Mockery::mock(ShopifySDK::class)
                          ->shouldReceive('Order->get')
                          ->once()
                          ->with([
                              'status'         => 'any',
                              'updated_at_min' => '2010-01-01T00:00:00+00:00',
                              'order'          => 'updated_at asc',
                              'limit'          => 250,
                              'page'           => 1,
                          ])->getMock();
        );

并给出这样的错误

ErrorException : Undefined property: Mockery_1__demeter_d588e5bd79af839e05009e561399d4e0_Order::$Order

【问题讨论】:

【参考方案1】:

解决方案非常简单

$this->app->bind(ShopifySDK::class, function () use ($apiResponse) 
            $mock        = Mockery::mock(ShopifySDK::class)->makePartial();
            $mock->Order = Mockery::mock(ShopifySDK::class)
                                  ->shouldReceive('get')
                                  ->with([
                                      'status'         => 'any',
                                      'updated_at_min' => '2010-01-01T00:00:00+00:00',
                                      'order'          => 'updated_at asc',
                                      'limit'          => 250,
                                      'page'           => 1,
                                  ])->getMock();
            return $mock;
        );

【讨论】:

以上是关于拉拉维尔 5.6。嘲讽。属性上的模拟方法的主要内容,如果未能解决你的问题,请参考以下文章

拉拉维尔 5.6。如何测试 JSON/JSONb 列

方法保存不存在。拉拉维尔

如何测试调用 API 的方法? (拉拉维尔)

拉拉维尔 5.5。验证请求重定向/响应

拉拉维尔 |更改 file() 的 realPath 值

此路由不支持 GET 方法。支持的方法:POST。拉拉维尔 8