Perl 是否有办法在catalyst中使用测试数据库

Perl 是否有办法在catalyst中使用测试数据库,perl,catalyst,Perl,Catalyst,在使用catalyst时,是否有一种方法可以像在Rails中那样指定开发、测试和生产数据库?我查阅了文档,但没有找到答案。参考cpan 您可能希望维护实时应用程序的“生产数据库”和 用于测试用例的“测试数据库” 在模型类中切换数据库配置 一种解决方案是允许使用环境变量覆盖数据库规范。例如,在编辑器中打开lib/MyApp/Model/MyAppDB.pm并更改 \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>配置(…声明类似于: my $dsn = $E

在使用catalyst时,是否有一种方法可以像在Rails中那样指定开发、测试和生产数据库?我查阅了文档,但没有找到答案。

参考cpan

您可能希望维护实时应用程序的“生产数据库”和 用于测试用例的“测试数据库”

在模型类中切换数据库配置

一种解决方案是允许使用环境变量覆盖数据库规范。例如,在编辑器中打开lib/MyApp/Model/MyAppDB.pm并更改
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>配置(…
声明类似于:

my $dsn = $ENV{MYAPP_DSN} ||= 'dbi:SQLite:myapp.db';
__PACKAGE__->config(
    schema_class => 'MyAppDB',
    connect_info => [
        $dsn,
        '',
        '',
        { AutoCommit => 1 },

    ],
);
然后,在运行测试用例时,可以使用以下命令:

$cp myapp.db myappTEST.db
$CATALYST_调试=0 MYAPP_DSN=“dbi:SQLite:myappTEST.db”prove--lib-vt/live_app01.t

这将仅在测试用例运行时修改DSN 在不使用MYAPP\u DSN环境的情况下启动普通应用程序 变量定义后,它将默认为与相同的dbi:SQLite:myapp.db 以前

使用多个配置文件切换数据库配置

通过利用s的功能加载 基于环境变量的多个配置文件,您可以覆盖 您的默认(生产)数据库连接设置

在测试中将$ENV{MYAPP\u CONFIG\u LOCAL\u SUFFIX}设置为“testing” 脚本导致加载名为的附加配置文件 myapp.conf之后的myapp_testing.conf将覆盖任何参数 在myapp.conf中

您应该在程序的BEGIN块中设置环境变量 测试脚本,确保在启动Catalyst应用程序之前已设置脚本 开始

下面是一个配置和测试脚本的示例 DBIx::名为MyDB的类模型和名为Foo的控制器:

myapp_testing.conf:

<Model::MyDB>
    <connect_info>
        dsn dbi:SQLite:myapp.db
    </connect_info>
</Model::MyDB>

dsn dbi:SQLite:myapp.db
使用单独数据库时也要检查

您阅读了吗?