【问题标题】:Laravel 4 unittest using wrong databaseLaravel 4 unittest使用错误的数据库
【发布时间】:2015-09-25 14:08:48
【问题描述】:

我已经创建了一个测试数据库环境如下:

return array(

    'default' => 'sqlite',

    'connections' => array(
        'sqlite' => array(
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => ''
        ),
    )
);

当我在我的 setUp 函数中初始化我的数据库时,这一切似乎都可以正常工作:

Mail::pretend(true);
Artisan::call('migrate');

$this->seed();

任何直接在我的测试中直接在我的测试类中的查询都会返回我所期望的结果,但是如果我在我的模型上调用一个对它使用我的“实时”的数据库执行任何操作的函数(我在一个 vagrant dev 中运行它服务器所以没有破坏任何东西的风险)数据库而不是我的测试数据库。我是否需要进一步更改我的配置以确保它正在使用我的测试数据库?还是我需要以特殊方式实例化我的模型?

一个不起作用的例子。在我的测试中:

// gets the correct company
$comp = Companies::find(1);
// gets results from wrong database
$comp->quotesAndOrders();

quotesAndOrders 对 hasMany 关系(订单)进行简单查询

$this->orders()->get();

【问题讨论】:

  • 这是 Laravel 4,抱歉。我以为我把它放了,但我只把它放在标签里。更新了标题以使其更清晰
  • 哦,在那种情况下,我已经删除了重复的投票,对此感到抱歉

标签: php laravel laravel-4 phpunit


【解决方案1】:

首先,在我们的 .env 文件中,我们必须添加一个新变量。 看起来像这样。

DB_CONNECTION=sqlite

这是因为当 .env 文件中没有这个变量时,Laravel 默认使用 MySQL:

看这里..

'default' => env('DB_CONNECTION', 'mysql')

现在我们的应用程序指向我们的sqlite 数据库,我们现在可以运行我们的migrationsseeding。之后,如果您只想继续运行 MySQL,请从 .env 文件中删除 DB_CONNECTION=sqlite

现在您的根文件夹中有一个phpunit.xml 文件,打开它并在<php> 节点下创建一个新变量

<env name="DB_CONNECTION" value="sqlite"/>

【讨论】:

  • 这是 laravel 4 抱歉不清楚。我已经尝试将 db 连接添加到我的 .env.testing.php 但它没有区别
【解决方案2】:

这个项目最初是基于别人的代码。在我的公司模型中(令人讨厌的是没有其他类,这是我测试的第一个类,否则我会更早发现它)有一个明确的定义来使用 mysql 数据库。我不确定这是为什么。我已经删除了该行,现在它可以工作了。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2014-03-19
    • 1970-01-01
    • 2015-10-07
    • 2014-12-12
    • 1970-01-01
    • 2018-07-10
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多