Я недавно начал писать модульные тесты (я следую учебному пособию по кулинарной книге cakephp) на каком-то старом коде и столкнулся с проблемой.
Модель импортирует другую модель с App::import('Model', 'Model2')
и new Model2()
или ClassRegistry::init('Model2')
. Я сделал прибор для обеих моделей, но Model2 по-прежнему использует модель по умолчанию.
Может кто-нибудь дать мне несколько советов о том, как с этим бороться?
Я искал в Интернете некоторые примеры, но, очевидно, cakephp2 почти не используется, не говоря уже о phpunit.
Модель
App::uses('Credit', 'Model');
class Credit extends AppModel {
public function transfer_credits($from_comp, $from_user, $to_comp, $to_user, $credits) {
App::import('Model', 'CreditTransfer');
$CreditTransfer = ClassRegistry::init('CreditTransfer');
$CreditTransfer->save($data);
}
}
Тест
class CreditTest extends CakeTestCase {
public $fixures = array('app.credit','app.credit_transfer');
public function setUp() {
parent::setUp();
$this->Credit = ClassRegistry::init('Credit');
$this->Credit->useDbConfig = 'test';
$this->CreditTransfer = ClassRegistry::init('CreditTransfer');
$this->CreditTransfer->useDbConfig = 'test';
}
public function testTransferCreditsValid() {
$credit_tranfers_before = $this->CreditTransfer->find('count');
$result = $this->Credit->transfer_credits(1, 1, 2, 2, 5);
$credit_tranfers_after = $this->CreditTransfer->find('count');
$this->assertEqual($credit_tranfers_before + 1, $credit_tranfers_after);
}
}
Итак, в заключение: Model1
импорт Model2
.
Model2
идет в реальную базу данных вместо использования фикстуры.