【问题标题】:Is there a way to use a testing database in catalyst有没有办法在催化剂中使用测试数据库
【发布时间】:2013-02-07 22:27:42
【问题描述】:

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

【问题讨论】:

  • 你读过this吗?

标签: perl catalyst


【解决方案1】:

参考来自 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
$催化剂调试=0 MYAPP_DSN="dbi:SQLite:myappTEST.db" 证明 --lib lib -v t/live_app01.t

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

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

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

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

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

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

myapp_testing.conf:

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多