簡體   English   中英

使用管道測試嘲諷

[英]Test mockery with a pipeline

我怎么能斷言這一點:

$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);
    }
}

我基本上想跳過管道或設置 andReturn($payload) 對它們。

您可以使管道成為對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']);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM