2016-05-20 8 views
1

Ich arbeite mit Laravel 5/Codeception.Test Datenbank und Codeception

Ich arbeite mit einer Testdatenbank.

Hier ist meine config:

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' 

So, hier definiere ich meine db db meinem Test ist.

Dann in meinem bootstrap.php ich habe:

$app->loadEnvironmentFrom('.env.testing'); 

Und .env.testing:

DB_HOST=127.0.0.1 
DB_DATABASE=kendo_test 
DB_USERNAME=homestead 
DB_PASSWORD=secret 

Als Test habe ich geändert kendo_test kendo_test2, und es versagt, ist es mit dieser db.

jetzt, wenn ich eine Abnahmeprüfung durchführen, schlägt mein Test, weil Zeile in Haupt db eingefügt wird, nicht testen, und ich weiß nicht, warum ....

Hier ist mein Test ist:

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]); 
} 

Irgendeine Idee warum ???

+0

Wenn Sie auf '$ I-> klicken (trans ('core.save'));' wird das '.env' aus Ihrer App verwendet und nicht das aus' $ app-> loadEnvironmentFrom'. – user2094178

+0

Nein. Es sollte laden .env.testing in bootstrap.php aufgerufen –

Antwort

1

Wenn Sie auf $I->click(trans('core.save')); klicken, wird die .env-Datei von Ihrer App verwendet und nicht die von $app->loadEnvironmentFrom.

Dies liegt daran, dass Sie beim Ausführen von Akzeptanztests über einen Browser mit Ihrer App interagieren.

Der Test, der ausgeführt wird, hat eine eigene Instanz sowie die App, auf die der Test zugreift.

Der einzige Grund, den Sie hier verwenden würden $app->loadEnvironmentFrom ist, Eloquent zu nutzen, und selbst dann muss es auf einer separaten Verbindung sein.