希望每个人都做得很好。
我有问题。在我的Yii2应用程序中运行验证测试之前,我需要在db中加载我的灯具。 这里有详细介绍。
:定位: 在数据库中加载灯具,以便我可以对它们运行验收测试。
问题: 尽管我最多的努力,我仍然无法实现这种影响
以下是我要与您分享的数据:
常见\模块\ myCustomModule \测试\验收\模型\ DashboardCest ```
class ResumeDashboardCest
{
public function _before(AcceptanceTester $I)
{
$I->haveFixtures([
'country' => [
'class' => CountryFixture::className(),
'dataFile' => codecept_data_dir() . 'country_data.php',
],
'region' => [
'class' => RegionFixture::className(),
'dataFile' => codecept_data_dir() . 'region_data.php',
],
'city' => [
'class' => CityFixture::className(),
'dataFile' => codecept_data_dir() . 'city_data.php',
],
'user_group' => [
'class' => UserGroupFixture::className(),
'dataFile' => codecept_data_dir() . 'user_group.php',
],
'user' => [
'class' => UserFixture::className(),
'dataFile' => codecept_data_dir() . 'user.php',
],
'status' => [
'class' => StatusFixture::className(),
'dataFile' => codecept_data_dir() . 'status_data.php',
],
'resume' => [
'class' => ResumeFixture::className(),
'dataFile' => codecept_data_dir() . 'resume_data.php'
],
]);
// initialize the module first
// fill in the login page before performing my main test
$I->amGoingTo("Login in My Application");
$I->amOnPage(Url::toRoute('/site/login'));
$I->fillField('#loginform-username', 'admin');
$I->fillField('#loginform-password', 'gulabmehak');
$I->click('.btn-success'); // The login button
$I->wait(3); // wait for 3 seconds meanwhile bakend processing is complete
$I->dontSee('Incorrect username or password.');
}
// my test function
public function load_HomePage(AcceptanceTester $I)
{
$I->amOnPage( Url::toRoute('/'.\Yii::$app->params['ModuleName'].'/resume/index') );
$I->see(T::t('main', 'My Resumes'));
$I->see(T::t('main', 'My Resumes'), 'ul.breadcrumb li.active');
}
}
这是国家的固定装置 的共同\模块\ myCustomModule \测试\夹具\ CountryFixture
class CountryFixture extends \yii\test\ActiveFixture
{
public $modelClass = 'common\modules\location\models\Country'; // the model for this belongs to another module
public function beforeLoad() {
parent::beforeLoad();
$this->db->createCommand()->setSql('SET FOREIGN_KEY_CHECKS = 0')->execute();
}
public function afterLoad() {
parent::afterLoad();
$this->db->createCommand()->setSql('SET FOREIGN_KEY_CHECKS = 1')->execute();
}
}
其他夹具文件也是如此,但我已经将它们删除了。
这是数据(灯具数据)文件: 的共同\模块\ myCustomModule \测试\数据\ country_data.php
<?php
return [
[
'name' => 'Pakistan',
'iso' => 'PK',
'status' => 1,
],
[
'name' => 'China',
'iso' => 'CH',
'status' => 1,
],
[
'name' => 'United States of America',
'iso' => 'US',
'status' => 1,
],
[
'name' => 'Saudi Arabia',
'iso' => 'SA',
'status' => 1,
],
[
'name' => 'Japan',
'iso' => 'JP',
'status' => 1,
],
];
以防您需要我的配置: 的共同\模块\ myCustomModule \测试\ acceptance.suite.yml
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- Yii2:
part:
[init, orm, fixtures]
config:
db:
populate: false
cleanup: false
WebDriver:
url: 'http://localhost/myProject/'
browser: phantomjs
window_size: 1920x1310
capabilities:
webStorageEnabled: true
Codeception:2.2.9 Yii2应用程序版本:2.0.12 作曲家:1.4.2 我也在使用PhantomJs进行测试
如有任何问题,请与我们联系。 保持祝福。
答案 0 :(得分:0)
我找到了一个基于我在https://github.com/Codeception/Codeception/issues/4099
开始的主题的解决方案我只是像我在mu单元测试中那样在我的验收测试中加载了灯具
这是我在_before()方法
之前放入我的Cest文件的方法public function _fixtures()
{
return [
'country' => [
'class' => CountryFixture::className(),
'dataFile' => codecept_data_dir() . 'country_data.php',
],
'region' => [
'class' => RegionFixture::className(),
'dataFile' => codecept_data_dir() . 'region_data.php',
],
'city' => [
'class' => CityFixture::className(),
'dataFile' => codecept_data_dir() . 'city_data.php',
],
'user_group' => [
'class' => UserGroupFixture::className(),
'dataFile' => codecept_data_dir() . 'user_group.php',
],
'user' => [
'class' => UserFixture::className(),
'dataFile' => codecept_data_dir() . 'user.php',
],
'status' => [
'class' => StatusFixture::className(),
'dataFile' => codecept_data_dir() . 'status_data.php',
],
'resume' => [
'class' => ResumeFixture::className(),
'dataFile' => codecept_data_dir() . 'resume_data.php'
],
];
}
有趣的是我看不到夹具在我的数据库中加载,但是我可以在这里检查是否在运行我的测试方法之前检查我的cest文件以确定数据是否存储在db中。 < / p>
我将此代码放在我的_before()方法
中 $I->seeRecord(UserModel::className(), ['username'=>'admin', 'email'=>'admin@offneo.com']);
$I->seeRecord(CountryModel::className(), ['name'=>'Pakistan', 'iso'=>'PK']);
$I->seeRecord(ResumeModel::className(), ['title'=>'Second Resume', 'created_at'=>'2017-08-15 10:06:06']);
以上几行确认我在我的数据库中加载了灯具。现在我可以将其余的代码放在我的验收测试中。
可能这会对某人有所帮助。 保持祝福。