https://github.com/chriskacerguis/codeigniter-restserver/releases(v2.7.7)とhttps://github.com/kenjis/ci-phpunit-test(v0.12.1)を使用します。私はこのテストを実行しようとREST_Controller
ci-phpunit-test終了割り込みテスト
{
call_user_func_array([$this, $controller_method], $arguments);
}
catch (CIPHPUnitTestExitException $ex) {
// This block is for ci-phpunit-test
throw $ex;
}
catch (Exception $ex) {
私のテストは簡単な
class Example_test extends TestCase
{
public function test_When_get_users_Then_returns_all_user_data()
{
try
{
# var_dump('a'); // show on the terminal
$output = $this->request('GET', 'api/example/users');
# var_dump('b'); // not show on the terminal
}
catch (CIPHPUnitTestExitException $e)
{
$output = ob_get_clean();
}
$data = json_decode($output, true);
$this->assertCount(3, $data);
$this->assertResponseCode(200);
}
}
あるを変更しようと、私は端末に要求出力を得ました。
$ php phpunit controller/api/Example_test.php
[{"id":1,"name":"John","email":"[email protected]","fact":"Loves coding:},{...},...]
そして、私は問題を発見したがlibraries/Rest_Controller.php
Linuxの
public function response($data = NULL, $http_code = NULL, $continue = FALSE)
{
if ($continue === FALSE)
{
// Display the data and exit execution
$this->output->_display();
exit; # -----> Interrupt test
}
}
がある作業(PHPのバージョンは5.6である)を実行しています。 Windowsでは動作しません(PHPのバージョンは5.4です)。
そして、私は簡単なコントローラを作成して、exit
をテストしようとしています。
Exit_to_exception.php
<?php
class Exit_to_exception extends CI_Controller
{
public function call_exit_in_controller_method()
{
$this->output
->set_status_header(200)
->set_content_type('application/json', 'utf-8')
->set_output(json_encode(['foo' => 'bar']))
->_display();
exit();
}
}
Exit_to_exception_test.php
<?php
/**
* @group patcher
*/
class Exit_to_exception_test extends TestCase
{
public function test_call_exit_in_controller_method()
{
try {
$output = $this->request(
'GET', 'exit_to_exception/call_exit_in_controller_method'
);
} catch (CIPHPUnitTestExitException $e) {
$output = ob_get_clean();
$this->assertEquals('Exit_to_exception', $e->class);
$this->assertEquals('call_exit_in_controller_method', $e->method);
$this->assertNull($e->exit_status);
}
$this->assertContains('{"foo":"bar"}', $output);
}
}
そして、私は私の窓の上で実行し、それは動作しません。
$ php phpunit controller/Exit_to_exception_test.php
{"foo":"bar"}