diff --git a/framework/console/controllers/ServeController.php b/framework/console/controllers/ServeController.php index 924e47a448..b806f67d55 100644 --- a/framework/console/controllers/ServeController.php +++ b/framework/console/controllers/ServeController.php @@ -86,11 +86,7 @@ class ServeController extends Controller $command .= " -r \"{$router}\""; } - if (YII_ENV === 'test') { - return true; - } - - passthru($command); + $this->runCommand($command); } /** @@ -132,4 +128,9 @@ class ServeController extends Controller fclose($fp); return true; } + + protected function runCommand($command) + { + passthru($command); + } } diff --git a/tests/framework/console/controllers/ServeControllerTest.php b/tests/framework/console/controllers/ServeControllerTest.php index e59df5d665..35a5db6d07 100644 --- a/tests/framework/console/controllers/ServeControllerTest.php +++ b/tests/framework/console/controllers/ServeControllerTest.php @@ -31,10 +31,11 @@ class ServeControllerTest extends TestCase /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMocK::className()) ->setConstructorArgs(['serve', Yii::$app]) - ->setMethods(['isAddressTaken']) + ->setMethods(['isAddressTaken', 'runCommand']) ->getMock(); $serveController->expects($this->once())->method('isAddressTaken')->willReturn(true); + $serveController->expects($this->never())->method('runCommand'); $serveController->docroot = $docroot; $serveController->port = 8080; @@ -48,14 +49,21 @@ class ServeControllerTest extends TestCase $this->assertContains('http://localhost:8080 is taken by another process.', $result); } - public function testDefautlValues() + public function testDefaultValues() { $docroot = __DIR__ . '/stub'; - $serveController = new ServeControllerMock('serve', Yii::$app); + /** @var ServeController $serveController */ + $serveController = $this->getMockBuilder(ServeControllerMock::className()) + ->setConstructorArgs(['serve', Yii::$app]) + ->setMethods(['runCommand']) + ->getMock(); + $serveController->docroot = $docroot; $serveController->port = 8080; + $serveController->expects($this->once())->method('runCommand')->willReturn(true); + ob_start(); $serveController->actionIndex(); ob_end_clean(); @@ -71,9 +79,16 @@ class ServeControllerTest extends TestCase { $docroot = '/not/exist/path'; - $serveController = new ServeControllerMock('serve', Yii::$app); + /** @var ServeController $serveController */ + $serveController = $this->getMockBuilder(ServeControllerMock::className()) + ->setConstructorArgs(['serve', Yii::$app]) + ->setMethods(['runCommand']) + ->getMock(); + $serveController->docroot = $docroot; + $serveController->expects($this->any())->method('runCommand')->willReturn(true); + ob_start(); $serveController->actionIndex(); ob_end_clean(); @@ -88,11 +103,18 @@ class ServeControllerTest extends TestCase $docroot = __DIR__ . '/stub'; $router = '/not/exist/path'; - $serveController = new ServeControllerMock('serve', Yii::$app); + /** @var ServeController $serveController */ + $serveController = $this->getMockBuilder(ServeControllerMock::className()) + ->setConstructorArgs(['serve', Yii::$app]) + ->setMethods(['runCommand']) + ->getMock(); + $serveController->docroot = $docroot; $serveController->port = 8081; $serveController->router = $router; + $serveController->expects($this->any())->method('runCommand')->willReturn(true); + ob_start(); $serveController->actionIndex(); ob_end_clean(); @@ -107,11 +129,18 @@ class ServeControllerTest extends TestCase $docroot = __DIR__ . '/stub'; $router = __DIR__ . '/stub/index.php'; - $serveController = new ServeControllerMock('serve', Yii::$app); + /** @var ServeController $serveController */ + $serveController = $this->getMockBuilder(ServeControllerMock::className()) + ->setConstructorArgs(['serve', Yii::$app]) + ->setMethods(['runCommand']) + ->getMock(); + $serveController->docroot = $docroot; $serveController->port = 8081; $serveController->router = $router; + $serveController->expects($this->once())->method('runCommand')->willReturn(true); + ob_start(); $serveController->actionIndex(); ob_end_clean();