codeception没有看到dump.sql

And*_*rew 4 php mysql yii codeception

我正在使用Yii2和Codeception.问题是Codeception似乎没有看到数据库转储.为简单起见,我只考虑LoginCept验收测试:

use tests\_pages\LoginPage;

$I = new WebGuy($scenario);
$I->wantTo('ensure that login works');
$loginPage = LoginPage::openBy($I);

$I->see('Login', 'h1');

$I->amGoingTo('try to login with empty credentials');
$loginPage->login('', '');
$I->expectTo('see validations errors');
$I->see('Username cannot be blank.');
$I->see('Password cannot be blank.');
...
Run Code Online (Sandbox Code Playgroud)

所以,当我跑

./vendor/bin/codecept run tests/acceptance/LoginCept.php
Run Code Online (Sandbox Code Playgroud)

一切都运行没有错误:

Acceptance Tests (1) ----------------------------------------
Trying to ensure that login works (LoginCept.php)       Ok
-------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

但是只要我添加以下行

echo $I->grabFromDatabase('user', 'name', ['id' => 1]);
Run Code Online (Sandbox Code Playgroud)

测试开始失败:

Acceptance Tests (1) ----------------------------------------
Trying to ensure that login works (LoginCept.php)       Error
-------------------------------------------------------------
Time: 2.11 seconds, Memory: 9.75Mb
There was 1 error:
---------
1) Failed to ensure that login works in LoginCept.php
#1  F:\site\tests\acceptance\LoginCept.php:8  <-- 8 is the number of added line
#2  F:\site\tests\acceptance\LoginCept.php:8
FAILURES!
Run Code Online (Sandbox Code Playgroud)

下面我从配置文件中输入详细信息.

codeception.yml文件具有以下内容:

paths:
    tests: tests
    log: tests/_log
    data: tests/_data
    helpers: tests/_helpers
settings:
    bootstrap: _bootstrap.php
    suite_class: \PHPUnit_Framework_TestSuite
    memory_limit: 1024M
    log: true
    colors: true
modules:
    enabled: [Db]
    config:
        Db:
            dsn: 'mysql:host=localhost;dbname=site_test' 
            user: 'daemon'
            password: 'HsqyJSAbZC3q3KJa'
            dump: 'tests/_data/dump.sql'
            populate: true
            cleanup: true
Run Code Online (Sandbox Code Playgroud)

打印\ Yii :: $ app-> db给出:

yii\db\Connection Object
            (
                [dsn] => mysql:host=localhost;dbname=site_test
                [username] => daemon
                [password] => HsqyJSAbZC3q3KJa
                [attributes] =>
                [pdo] =>
                [enableSchemaCache] =>
                [schemaCacheDuration] => 3600
                ...
           )
Run Code Online (Sandbox Code Playgroud)

使用上面的凭据,我可以手动登录到我的数据库(在phpmyadmin中).

数据库转储位于F:\site\tests\_data\dump.sql.我从我的工作数据库中创建了它,称为site并在其中进行了一些修改:

CREATE DATABASE  IF NOT EXISTS `site_test`  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
USE `site_test`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` smallint(5),
  `name` varchar(50)
);

INSERT INTO `user` VALUES (1,'admin');
Run Code Online (Sandbox Code Playgroud)

每当我运行它时,Codeception 构建命令,给出:

$ ./vendor/bin/codecept build
Building Guy classes for suites: acceptance, functional, unit
WebGuy includes modules: WebHelper, PhpBrowser
WebGuy.php generated successfully. 48 methods added
TestGuy includes modules: Filesystem, TestHelper, Yii2
TestGuy.php generated successfully. 53 methods added
CodeGuy includes modules: CodeHelper
CodeGuy.php generated successfully. 1 methods added
Run Code Online (Sandbox Code Playgroud)

Ale*_*hov 7

确保为您的套装配置启用了Db模块.

然后你需要codecept build在使用Db模块的方法之前运行.

通常,每次在test suit配置中启用或禁用模块时都应该运行它.

  • 请确保您在测试套件配置中启用了Db模块(在您的情况下,它是acceptance.suit.yml),然后重建WebGuy (2认同)
  • 没有必要从全局codeception.yml复制所有Db配置,你只需要启用Db模块接受适合添加``enabled:[Selenium2,Db]``到``modules``部分. (2认同)