2014-10-11 10 views
6
finden

Ich versuche DBIx zu verwenden: Klasse. Ich habe erfolgreich die Schema-Klasse mit DBIx: class :: Schema :: Loader erstellt.DBIx: Klasse - kann keine Quelle für Modell

Ich kann auch eine Verbindung zur Datenbank herstellen.

#!/usr/bin/perl -w 
use Test::More tests => 5; 

use_ok('Models::ModelRole'); 
use_ok('Models::User'); 

my $model = Models::User->new(); 

cmp_ok($model->{ModelName}, 'eq', 'User', 'model name'); 

ok($model->connect(), "connect"); #works 


ok($model->{schema}->resultset('User')); 

Der letzte Test gibt die Fehlermeldung:

DBIx::Class::Schema::source(): Can't find source for User at ./tests/ModelsTests.pl line 29 

Das ist die Struktur der generierten Klasse von DBIx: Class :: Schema :: Loader:

enter image description here

Dies ist die Modellbenutzerklasse:

package Models::User; 

use DB::Glued::Schema::Result::User; 
use Models::ModelRole; 
use Moose; 


with 'Models::ModelRole'; 


sub BUILD { 
    my $self = shift; 

    $self->{schema} = Glued::Schema::Result::User->new(); 
    my @name = split('::', __PACKAGE__); 
    $self->{ModelName} = $name[-1]; 
} 
1; 

Ich hoffe, das ist genug Informationen.

Antwort

0

Schemata/Modelle müssen mit einer Quelle verbunden sein. Der DBIC-Code beschreibt nur die Daten und ihre Beziehungen. Es ist völlig agnostisch bezüglich der Quelle/Verbindung.

Sie müssen also DB::Glued::Schema verbinden, um das Modell ausüben zu können. Der beste Weg für Tests, glaube ich, besteht darin, eine Verbindung zu einer in :memory: SQLite DB herzustellen. Die DB wird natürlich leer sein. Es gibt ein paar Optionen/Ansätze zum Auffüllen, wenn Sie Fixtures benötigen. Suchen Sie nach Metacpan, wenn Sie das tun.

Es gibt ein nettes Paket, um Testverbindungen für Sie einfach zu machen: Test::DBIx::Class.

Verwandte Themen