【问题标题】:Test mockery with a pipeline使用管道测试嘲弄
【发布时间】:2021-03-03 03:01:56
【问题描述】:

我该如何断言:

$this->assertEquals('incoming', $payload['routerAction']);

跳过管道。我正在使用 phpleague/管道

代码:

class IncomingPipeline
{
    public function __invoke(array $payload)
    {
        $router = $payload['router'];
        $payload['routerAction'] = 'incoming';

        return (new Pipeline())
            ->pipe(new DispatchIncomingEventStage())
            ->pipe(BaseRouter::route($router))
            ->process($payload);
    }
}

我基本上想跳过 Pipeline OR set andReturn($payload) 他们。

【问题讨论】:

    标签: php phpunit mockery


    【解决方案1】:

    您可以使管道成为IncomingPipeline 的依赖项并将其传递给构造函数。这样,您就可以在测试中注入一个没有任何阶段的管道。

    如果你想保持原样,可以使用overload前缀(docs):

    final class IncomingPipelineTest extends TestCase
    {
        public function test()
        {
            $pipeline = Mockery::mock('overload:' . Pipeline::class);
            $pipeline->allows('pipe')->andReturnSelf();
            $pipeline->allows('process')->andReturnArg(0);
    
            $payload = (new IncomingPipeline())(...);
    
            self::assertEquals('incoming', $payload['routerAction']);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-27
      • 2015-01-25
      • 1970-01-01
      • 2017-09-01
      • 2016-03-24
      • 2019-08-03
      • 2014-10-27
      • 2013-06-30
      • 2020-09-06
      相关资源
      最近更新 更多