Тестовое издевательство с конвейером

Как я могу это утверждать:

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

Пропуск конвейеров. Я использую phpleague / pipeline

Код:

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).


person aamuller    schedule 19.11.2020    source источник


Ответы (1)


Вы можете сделать конвейер зависимым от IncomingPipeline и передать его в конструктор. Таким образом, вы можете внедрить конвейер без каких-либо этапов в ваших тестах.

Если вы хотите оставить все как есть, вы можете использовать префикс overload (документы):

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']);
    }
}
person Philip Weinke    schedule 19.11.2020