2015-01-05 8 views
0

DB를 사용하는 패키지가 있고 테스트를 위해 sqlite를 메모리에서 실행할 몇 가지 테스트를 만들고 싶습니다. 당신은 내가 sqlite가 데이터베이스를 만들고 여기에 볼을 처리하기위한 웅변 DB 객체를 생성 할 수있는 지금sqlite 및 laravel eloquent로 phpunit 테스트

use Illuminate\Database\Capsule\Manager; 

class TestCaseDb extends \PHPUnit_Framework_TestCase { 
    protected $db; 
    protected $tbmsg; 
    public function setUp() 
    { 
     parent::setUp(); // //DONT CARE 
     League\FactoryMuffin\Facade::getFaker()->unique($reset = true);//DONT CARE 
     $this->initDb(); 
     $this->initTbmsg(); //DONT CARE 
    } 

    protected function initDb() { 
     //confi gfor the sqlite 
     $capsule = new Manager(); 
     $capsule->addConnection([ 
      'driver' => 'sqlite', 
      'database' => ':memory:', 
      'prefix' => '', 
     ]); 
     $capsule->setAsGlobal(); 
     $capsule->bootEloquent(); 
     $this->db = $capsule->getDatabaseManager(); 

     //loading simple DB tables creation 
     $importSql = file_get_contents(__DIR__.'/dumps/dump.sql'); 
     $this->db->statement($importSql); 


    } 
} 

:

는 지금은이 기본 테스트 클래스가 있습니다. 나는

$this->db->select("whatever"); 

로를 조회하는 경우

하지만, 지금은 잘 작동합니다.

하지만 Eloquent 개체를 사용하려고하면 특정 테이블이 존재하지 않는다고 알려줍니다. (첫 번째 Db에 100 % 존재)

그래서 전설적인 모델은 내가 만든 하나의 DB 연결이 아니라 다른 DB 연결에 연결하려고합니다. 당신은뿐만 아니라 내 GitHub의 패키지의 코드를 볼 수 있습니다

class SimpleTest extends TestCaseDb { 
    /** 
    * @test 
    */ 
    public function first() { 
     //the below row works! 
     //$this->db->insert('insert into conv_users (conv_id, user_id) values (?, ?)', array(1, 2)); 

     //the insert with Eloquent fails.... 
     $data = League\FactoryMuffin\Facade::create('Tzookb\TBMsg\Models\Eloquent\Conversation', []); 
     $this->assertTrue(true); 
    } 
} 

: (지점 DEV) https://github.com/tzookb/tbmsg/tree/dev/tests

답변

4

뭘하고있는 것은 불필요 -

IE이 오류를주는 시험입니다 .

Laravel은 이미 수행하려는 작업을 수행하는 데 필요한 도구를 제공합니다.

setUp()TestCase에 추가하십시오.

Artisan::call('migrate'); 

$this->seed(); 

SQLite 메모리 데이터베이스에서 마이그레이션을 마이그레이션합니다.

당신은 다음과 같은 뭔가가 있어야합니다

<?php 

class TestCase extends \Illuminate\Foundation\Testing\TestCase { 

    public function setUp() 
    { 
     parent::setUp(); 

     Artisan::call('migrate'); 

     $this->seed(); 
    } 

    /** 
    * Creates the application. 
    * 
    * @return \Symfony\Component\HttpKernel\HttpKernelInterface 
    */ 
    public function createApplication() 
    { 
     $unitTesting = true; 

     $testEnvironment = 'testing';  

     return require __DIR__.'/../../bootstrap/start.php'; 
    } 

} 
+0

감사하지만,이 laravel 내부 테스트하지, 그것은 laravel을위한 패키지입니다. 내 패키지를 테스트하기 위해 sqlite를 사용합니다. –

+0

[여기] (http://laravel.com/docs/4.2/packages#package-migrations)을 읽으십시오. – GiamPy

+0

감사합니다. :) :) laravel 프로젝트의 범위 안에 있지 않습니다. 패키지를 테스트하는 데만 사용됩니다. laravel과 관련이 없으며, laravel 패키지이며 DB 단위를 사용하지만 테스트는 외부에서 실행됩니다. 그것의 범위. –

관련 문제