Sie auch Fremdschlüssel auf einer Pro-Test (Datei) Basis aktivieren könnten, wenn die Tests hängen tatsächlich auf Tabellen mit Fremdschlüsseln.
Hier ist ein Merkmal: (z tests/ForeignKeys.php
)
<?php
namespace Tests;
trait ForeignKeys
{
/**
* Enables foreign keys.
*
* @return void
*/
public function enableForeignKeys()
{
$db = app()->make('db');
$db->getSchemaBuilder()->enableForeignKeyConstraints();
}
}
vergessen Sie nicht die Methode irgendwo in Ihrer Test-Set-up-Kette zu laufen. Ich habe meine als Überschreibung zu meinem Testfall: (tests/TestCase.php
)
<?php
namespace Tests;
/**
* Class TestCase
* @package Tests
* @mixin \PHPUnit\Framework\TestCase
*/
abstract class TestCase extends \Illuminate\Foundation\Testing\TestCase
{
use CreatesApplication;
...
/**
* Boot the testing helper traits.
*
* @return array
*/
protected function setUpTraits()
{
$uses = parent::setUpTraits();
if (isset($uses[ForeignKeys::class])) {
/* @var $this TestCase|ForeignKeys */
$this->enableForeignKeys();
}
}
...
nach, dass Sie es zu Ihren Tests wie so hinzufügen:
<?php
namespace Tests\Feature;
use Tests\ForeignKeys;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleFeatureTest extends TestCase
{
use DatabaseMigrations;
use ForeignKeys;
...
Angenommen, die meisten Benutzer verwenden sqlite zum Testen, können Sie die Bedingungen für Fremdschlüssel testweise aktivieren. Da das Setzen von foreign_keys Auswirkungen auf Anweisungen hat, die vor der Änderung der Einstellung vorbereitet wurden, können Sie diesen Code einfach zu einer Hilfsmethode in Ihrem Testfall hinzufügen und bei Bedarf aufrufen. – jhoff
Ich bin in Laravel 5.5 und mit dieser Lösung habe ich ein seltsames Verhalten. Wenn ich versuche -> attach() ein Modell an ein anderes (viele zu viele Beziehung): * PDOException: SQLSTATE [HY000]: Allgemeiner Fehler: 1 keine solche Tabelle: main.cv * ... ** cvs ** ist mein Tabelle und ich versuche ** $ this-> cvs() -> attach ($ cv); ** Jemand hat ein ähnliches Problem? – Jairo
Arbeiten für Laravel 5.6 – bambamboole