public function testDispatch() { $router = new Router(); $getMock = Mockery::mock(ServerRequestInterface::class); $getMock->shouldReceive('getParsedBody')->andReturn([]); $getMock->shouldReceive('getMethod')->andReturn('GET'); $getMock->shouldReceive('getUri->getPath')->andReturn('/'); $getMock->shouldReceive('setArguments')->with([]); $postMock = Mockery::mock(ServerRequestInterface::class); $postMock->shouldReceive('getParsedBody')->andReturn([]); $postMock->shouldReceive('getMethod')->andReturn('POST'); $postMock->shouldReceive('getUri->getPath')->andReturn('/'); $postMock->shouldReceive('setArguments')->with([]); $getCalled = 0; $postCalled = 0; $router->get('', function (ServerRequestInterface $req, \Closure $next) { return $next($req) . ' getMiddleware'; }, function (ServerRequestInterface $req) use(&$getCalled) { $getCalled++; return 'get'; }); $router->post('', function (ServerRequestInterface $req, \Closure $next) { return $next($req) . ' postMiddleware'; }, function (ServerRequestInterface $req) use(&$postCalled) { $postCalled++; return 'post'; }); $this->assertEquals('get getMiddleware', $router->dispatch($getMock)); $this->assertEquals(1, $getCalled); $this->assertEquals(0, $postCalled); $this->assertEquals('post postMiddleware', $router->dispatch($postMock)); $this->assertEquals(1, $getCalled); $this->assertEquals(1, $postCalled); }