有没有办法在催化剂中使用测试数据库

时间:2013-02-06 22:52:31

标签: perl catalyst

使用催化剂时,有没有办法像在Rails中那样指定开发,测试和生产数据库?我查看了文档,但我没有找到答案。

1 个答案:

答案 0 :(得分:4)

参考cpan Catalyst Testing Tutorial

  

您可能希望同时为您的实时应用程序维护一个“生产数据库”   测试用例的“测试数据库”。

     

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

     

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

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_DEBUG = 0   MYAPP_DSN =“dbi:SQLite:myappTEST.db”证明--lib lib -v t / live_app01.t

     

这将仅在测试用例运行时修改DSN。如果你   在没有MYAPP_DSN环境的情况下启动您的正常应用程序   变量定义,它将默认为相同的dbi:SQLite:myapp.db as   之前。

     

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

     

利用Catalyst::Plugin::ConfigLoader的功能进行加载   基于您可以覆盖的环境变量的多个配置文件   您的默认(生产)数据库连接设置。

     

在测试中将$ ENV {MYAPP_CONFIG_LOCAL_SUFFIX}设置为'testing'   脚本导致加载另一个名为的配置文件   myapp.conf之后的myapp_testing.conf将覆盖任何参数   在myapp.conf中。

     

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

     

以下是a的配置和测试脚本的示例   DBIx :: Class模型名为MyDB,控制器名为Foo:

     

myapp_testing.conf:

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

使用单独的数据库时也要检查this