我正在使用Laravel 5 / Codeception。
我正在使用测试数据库。
这是我的配置:
acceptance.suite.yml:
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- \Helper\Acceptance
- Db
- Asserts
config:
WebDriver:
url: 'http://laravel.dev'
browser: 'phantomjs'
window_size: 1024x768
Db:
dsn: 'mysql:host=laravel.dev;dbname=kendo_test'
user: 'homestead'
password: 'secret'
所以,在这里我将我的数据库定义为我的测试数据库。
然后,在我的bootstrap.php中,我有:
$app->loadEnvironmentFrom('.env.testing');
和.env.testing:
DB_HOST=127.0.0.1
DB_DATABASE=kendo_test
DB_USERNAME=homestead
DB_PASSWORD=secret
作为测试,我将kendo_test更改为kendo_test2,但它失败了,它正在使用此数据库。
现在,当我执行验收测试时,我的测试失败,因为行插入主数据库,而不是测试,而且我不知道为什么......
这是我的测试:
public function it_create_user(\AcceptanceTester $I, $scenario)
{
App::setLocale('en');
$user = factory(User::class)->make();
$I = new SimpleUser($scenario);
$I->logAsUser();
$I->dontSee(trans_choice('core.user', 2) . ' </a></li>');
$I->logout();
$I = new SuperAdmin($scenario);
$I->logAsSuperAdmin();
$I->click('#dropdown-user');
$I->click(trans_choice('core.user', 2));
$I->click(trans('core.addModel', ['currentModelName' => trans_choice('core.user', 1)]));
$I->fillField('name',$user->name );
$I->fillField('email',$user->email);
$I->fillField('firstname',$user->firstname);
$I->fillField('lastname',$user->lastname);
$I->fillField('password','111111');
$I->fillField('password_confirmation','111111');
$I->click(trans('core.save')); // <-- Here is should save it
$I->seeInCurrentUrl('/users');
$I->seeInSource(trans('msg.user_create_successful'));
$I->seeInDatabase('ken_users', ['name' => $user->name]);
}
任何想法为什么???
答案 0 :(得分:1)
当您点击$I->click(trans('core.save'));
时,它将从您的应用中使用.env而不是$app->loadEnvironmentFrom
中的.env。
这是因为在运行验收测试时,您正通过浏览器与您的应用进行交互。
正在运行的测试有自己的实例,以及测试访问的应用程序。
此处使用$app->loadEnvironmentFrom
的唯一原因是利用Eloquent,即使这样,它也必须在单独的连接上。