Skip to content

Commit ecc6c61

Browse files
committed
Use Mock tests, after checking the real test.
1 parent 39cf0a5 commit ecc6c61

File tree

2 files changed

+88
-51
lines changed

2 files changed

+88
-51
lines changed

framework/console/controllers/ServeController.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ public function actionIndex($address = 'localhost')
8686
$command .= " -r \"{$router}\"";
8787
}
8888

89+
if (YII_ENV === 'test') {
90+
return true;
91+
}
92+
8993
passthru($command);
9094
}
9195

tests/framework/console/controllers/ServeControllerTest.php

Lines changed: 84 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -24,78 +24,111 @@ public function setUp()
2424
$this->mockApplication();
2525
}
2626

27-
public function testActionIndex()
27+
public function testAddressTaken()
2828
{
29-
if (!\function_exists('pcntl_fork')) {
30-
$this->markTestSkipped('pcntl_fork() is not available');
31-
}
29+
$docroot = __DIR__ . '/stub';
3230

33-
if (!\function_exists('posix_kill')) {
34-
$this->markTestSkipped('posix_kill() is not available');
35-
}
31+
/** @var ServeController $serveController */
32+
$serveController = $this->getMockBuilder(ServeControllerMock::class)
33+
->setConstructorArgs(['serve', Yii::$app])
34+
->setMethods(['isAddressTaken'])
35+
->getMock();
3636

37-
if (!\function_exists('pcntl_waitpid')) {
38-
$this->markTestSkipped('pcntl_waitpid() is not available');
39-
}
37+
$serveController->expects($this->once())->method('isAddressTaken')->willReturn(true);
4038

41-
$controller = new ServeController('serve', Yii::$app);
42-
$controller->docroot = __DIR__ . '/stub';
43-
$controller->port = 8080;
39+
$serveController->docroot = $docroot;
40+
$serveController->port = 8080;
4441

45-
$pid = \pcntl_fork();
42+
ob_start();
43+
$serveController->actionIndex('localhost:8080');
44+
ob_end_clean();
4645

47-
if ($pid == 0) {
48-
\ob_start();
49-
$controller->actionIndex('localhost');
50-
\ob_get_clean();
51-
exit();
52-
}
46+
$result = $serveController->flushStdOutBuffer();
5347

54-
\sleep(1);
48+
$this->assertContains('http://localhost:8080 is taken by another process.', $result);
49+
}
50+
51+
public function testDefautlValues()
52+
{
53+
$docroot = __DIR__ . '/stub';
54+
55+
$serveController = new ServeControllerMock('serve', Yii::$app);
56+
$serveController->docroot = $docroot;
57+
$serveController->port = 8080;
58+
59+
ob_start();
60+
$serveController->actionIndex();
61+
ob_end_clean();
62+
63+
$result = $serveController->flushStdOutBuffer();
64+
65+
$this->assertContains('Server started on http://localhost:8080', $result);
66+
$this->assertContains("Document root is \"{$docroot}\"", $result);
67+
$this->assertContains('Quit the server with CTRL-C or COMMAND-C.', $result);
68+
}
69+
70+
public function testDoocRootWithNoExistValue()
71+
{
72+
$docroot = '/not/exist/path';
73+
74+
$serveController = new ServeControllerMock('serve', Yii::$app);
75+
$serveController->docroot = $docroot;
5576

56-
$response = \file_get_contents('http://localhost:8080');
77+
ob_start();
78+
$serveController->actionIndex();
79+
ob_end_clean();
5780

58-
$this->assertEquals('Hello!', $response);
81+
$result = $serveController->flushStdOutBuffer();
5982

60-
\posix_kill($pid, \SIGTERM);
61-
\pcntl_waitpid($pid, $status);
83+
$this->assertContains("Document root \"{$docroot}\" does not exist.", $result);
6284
}
6385

64-
public function testActionIndexWithRouter()
86+
public function testWithRouterNoExistValue()
6587
{
66-
if (!\function_exists('pcntl_fork')) {
67-
$this->markTestSkipped('pcntl_fork() is not available');
68-
}
88+
$docroot = __DIR__ . '/stub';
89+
$router = '/not/exist/path';
6990

70-
if (!\function_exists('posix_kill')) {
71-
$this->markTestSkipped('posix_kill() is not available');
72-
}
91+
$serveController = new ServeControllerMock('serve', Yii::$app);
92+
$serveController->docroot = $docroot;
93+
$serveController->port = 8081;
94+
$serveController->router = $router;
7395

74-
if (!\function_exists('pcntl_waitpid')) {
75-
$this->markTestSkipped('pcntl_waitpid() is not available');
76-
}
96+
ob_start();
97+
$serveController->actionIndex();
98+
ob_end_clean();
7799

78-
$controller = new ServeController('serve', Yii::$app);
79-
$controller->docroot = __DIR__ . '/stub';
80-
$controller->port = 8081;
81-
$controller->router = __DIR__ . '/stub/index.php';
100+
$result = $serveController->flushStdOutBuffer();
82101

83-
$pid = \pcntl_fork();
102+
$this->assertContains("Routing file \"$router\" does not exist.", $result);
103+
}
84104

85-
if ($pid == 0) {
86-
\ob_start();
87-
$controller->actionIndex('localhost');
88-
\ob_get_clean();
89-
exit();
90-
}
105+
public function testWithRouterValue()
106+
{
107+
$docroot = __DIR__ . '/stub';
108+
$router = __DIR__ . '/stub/index.php';
91109

92-
\sleep(1);
110+
$serveController = new ServeControllerMock('serve', Yii::$app);
111+
$serveController->docroot = $docroot;
112+
$serveController->port = 8081;
113+
$serveController->router = $router;
93114

94-
$response = \file_get_contents('http://localhost:8081');
115+
ob_start();
116+
$serveController->actionIndex();
117+
ob_end_clean();
95118

96-
$this->assertEquals('Hello!', $response);
119+
$result = $serveController->flushStdOutBuffer();
97120

98-
\posix_kill($pid, \SIGTERM);
99-
\pcntl_waitpid($pid, $status);
121+
$this->assertContains('Server started on http://localhost:8081', $result);
122+
$this->assertContains("Document root is \"{$docroot}\"", $result);
123+
$this->assertContains("Routing file is \"{$router}\"", $result);
124+
$this->assertContains('Quit the server with CTRL-C or COMMAND-C.', $result);
100125
}
101126
}
127+
128+
/**
129+
* Mock class for [[\yii\console\controllers\ServeController]].
130+
*/
131+
class ServeControllerMock extends ServeController
132+
{
133+
use StdOutBufferControllerTrait;
134+
}

0 commit comments

Comments
 (0)