在插件中使用不同表名的Cakephp Fixture
我是CakePHP测试新手,现在正在创建一个新插件,希望为它创建单元测试 新插件“MyPlugin”连接到多个数据库,其中一个数据库与不遵循cake命名标准的none-cake应用程序(迁移到cake)共享 我想创建的第一个测试是从“AppApiKey”表中获取一些数据,但是数据库中的名称都是小写,没有“u”,所以是“AppApiKey”而不是“app_api_key” 在名为“AppApiKeyFixture”的插件中创建了一个装置在插件中使用不同表名的Cakephp Fixture,cakephp,phpunit,fixtures,Cakephp,Phpunit,Fixtures,我是CakePHP测试新手,现在正在创建一个新插件,希望为它创建单元测试 新插件“MyPlugin”连接到多个数据库,其中一个数据库与不遵循cake命名标准的none-cake应用程序(迁移到cake)共享 我想创建的第一个测试是从“AppApiKey”表中获取一些数据,但是数据库中的名称都是小写,没有“u”,所以是“AppApiKey”而不是“app_api_key” 在名为“AppApiKeyFixture”的插件中创建了一个装置 namespace MyPlugin\Test\Fixtur
namespace MyPlugin\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class AppApiKeyFixture extends TestFixture {
public $connection = 'test_ctrller';
public $table = 'appapikey';
//public $import = [ 'table' => 'appapikey', 'connection' => 'ctrller' ];
public $fields = [
'id' => ['type' => 'string'],
'key' => ['type' => 'string' ],
'label' => 'text',
'creationdstamp' => 'datetime',
'_constraints' => [
'primary' => ['type' => 'primary', 'columns' => ['id']]
]
];
public $records = [
[
'id' => '03380d5b-1b05-467a-af32-ca8aecb4dcc6',
'key' => '53b4359a-a7d9-d6d7-9853-e569f408eae9',
'label' => 'MyLabel',
'creationdstamp' => '2019-11-12 15:53:48.176576+00'
]
];
}
我一直在尝试一些事情,似乎无论您是否使用导入,都会进行描述(那么为什么存在$fields?)
填写“$字段”和“$记录”。据我从文件和经验中了解:
namespace MyPlugin\Model\Table;
use Cake\ORM\Table;
class AppApiKeyTable extends Table {
public function initialize(array $config) {
parent::initialize($config);
$this->setTable('appapikey');
}
public static function defaultConnectionName() {
return 'ctrller';
}
}
TestCase调用我想要测试的函数:
namespace MyPlugin\Auth\ApiKey;
use Cake\ORM\TableRegistry;
class ApiKeyAuthenticator {
public function getApiKeyInfo($pKey) {
return TableRegistry::getTableLocator()->get('AppApiKey')->findByKey($pKey)->first();
}
}
此外,我还发现,在另一个装置中,我不得不使用“$import”,如果没有它,我也会得到一个:
Cake\Database\Exception:无法描述softwareid。它有0列
固定装置为:
namespace MyPlugin\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class SoftwareidFixture extends TestFixture {
//public $import = [ 'table' => 'softwareid', 'connection' => 'default' ];
public $fields = [
'id' => ['type' => 'string'],
'softwareid' => ['type' => 'string' ],
'name' => 'text',
'created' => 'datetime',
'_constraints' => [
'primary' => ['type' => 'primary', 'columns' => ['id']]
]
];
public $records = [
[
'id' => '5e26b612-2b74-40ed-aaa5-b48cb4b1d946',
'softwareid' => '228ebfe2-4a2b-49ec-ab75-43f44007b68d',
'name' => 'MySoftwarePackage',
'created' => '2019-10-31 12:08:10+00'
]
];
}
上面是默认连接中的一个表,“$fields”和“$records”应该足够了吧?不需要定义“$import”所以导入时两个表都可以使用,在我的情况下,这是一个很好的修复,因为一旦迁移完成(长期项目),将有70到100个表 简单的方法是定义模型,它在文档中,但我却盲目地盯着文档中提到的“$table”、“$connection”和“$fields” 因此,固定装置以:
namespace MyPlugin\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class AppApiKeyFixture extends TestFixture {
public $import = [ 'model' => 'AppApiKey', 'connection' => 'ctrller' ];
public $records = [
[
'id' => '03380d5b-1b05-467a-af32-ca8aecb4dcc6',
'key' => '53b4359a-a7d9-d6d7-9853-e569f408eae9',
'label' => 'MyLabel',
'creationdstamp' => '2019-11-12 15:53:48.176576+00'
]
];
}
对于那些在使用不同的表名和连接进行unittests时遇到问题的人来说,引用模型似乎是一种方法