2016-06-22 27 views
0

https://github.com/chriskacerguis/codeigniter-restserver/releases(v2.7.7)とhttps://github.com/kenjis/ci-phpunit-test(v0.12.1)を使用します。私はこのテストを実行しようとREST_Controllerci-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"} 

答えて

関連する問題