Domanda

Sto iniziando a provare e testare i miei oggetti Doctrine con PHPUnit e vorrei ricaricare nuovamente il DB dai miei oggetti modello ogni volta.

Il mio primo tentativo è simile al seguente:

class Tests_User extends PHPUnit_Framework_TestCase
{

    public function setUp()
    {

        Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');

        Doctrine::createDatabases();
        Doctrine::createTablesFromModels('../../application/models');

    }

    public function testSavingWorks()
    {

        $user = new User();
        $user->save();

    }

    public function testSavingWorksAgain()
    {

        $user = new User();
        $user->save();

    }

    public function tearDown()
    {

        Doctrine::dropDatabases();

    }

}

Il problema è che quando setUp () viene chiamato di nuovo per il secondo test, createTablesFromModels () fallisce, quindi ricevo un errore perché nessuna delle tabelle è presente.

Gradirei davvero un esempio di come qualcun altro ha reinizializzato una connessione Doctrine per PHPUnit o altri scopi di test dell'unità.

È stato utile?

Soluzione

Quindi si scopre che createTablesFromModels include i file e quindi confronta gli elenchi delle classi definite prima e dopo, motivo per cui non funziona due volte.

Una sequenza come la seguente funziona quando ripetuta:

Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());

Altri suggerimenti

Dai un'occhiata a questo Gist da Ocramius, che mostra che puoi testare utilizzando dispositivi di dati: https: // gist .github.com / Ocramius / 3994325

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top