2014-10-29 2 views
0

Я пытаюсь выполнить модульное тестирование с помощью CakePhP 2.3 и PHPUnit 2.7. Я хочу проверить функцию индекса в контроллере моего клиента. В моем контроллере у меня есть:Модульное тестирование с помощью CakePhP и PHPUnit

public function index() { 

    $this->Customer->recursive = -1; 
    $data = $this->paginate('Customer', array('Customer.status'=>'active')); 
    $this->set('customers', $data); 

} 

Я пытался следовать примеру в book.cakephp.org, поэтому я создал Крепеж класс, в котором I`m импортируя схемы клиента и все записи.

class CustomerFixture extends CakeTestFixture{ 

    public $import = array('model' => 'Customer', 'records' => true); 

} 

И, наконец, мой тестовый класс выглядит следующим образом:

class CustomersControllerTest extends ControllerTestCase { 

    public $fixtures = array('app.customer'); 

    public function testIndex() { 

     $result = $this->testAction('/customers/index'); 
     debug($result); 
    } 
} 

Когда я запускаю мой тест у меня есть следующее сообщение об ошибке:

Database Error Ошибка: SQLSTATE [23000]: Integrity ограничение нарушение: 1062 Дублируемая запись «8» для ключа «PRIMARY»

Есть ли у вас какие-либо идеи, в чем проблема?

ответ

1

В вашей базе данных.php в папке app/Config вам нужно добавить переменную $ test.

Например

class DATABASE_CONFIG { 

    public $default = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => true, 
     'host' => 'localhost', 
     'port' => 3306, 
     'login' => 'root', 
     'password' => 'xxxx', 
     'database' => 'mydatabase', 
     'encoding' => 'utf8' 
    ); 

    public $test = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'port' => 3306, 
     'login' => 'root', 
     'password' => 'xxxx', 
     'database' => 'mydatabase_test', 
     'encoding' => 'utf8' 
    ); 

} 

Тогда ваш модульное тестирование будет использовать mydatabase_test для тестирования кода. Потому что теперь он использует базу данных по умолчанию.

Смежные вопросы