首页 > 解决方案 > PHP 错误:在第 1344 行的 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 中的 null 上调用成员函数 connection()

问题描述

我正在做我的第一个单元测试。作为记录,我编写了几个功能测试并且它们有效。

在这里,有一点细节,我的表度量是 TimescaleDB ( Postgres ) 上的超表,所以我无法使用迁移/种子。

无论如何,因为它是一个单元测试,我这里不需要数据库连接。

这是我用于功能测试的工作配置:

<php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="DB_CONNECTION" value="sqlite"/>
        <server name="DB_DATABASE" value=":memory:"/>
        <server name="MAIL_DRIVER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>

这是我的代码:

 <?php

namespace Tests\Unit;

use App\Measure;
use Carbon\Carbon;
use PHPUnit\Framework\TestCase;

class MeasureTest extends TestCase
{

    public function setUp() : void
    {
        parent::setUp();
    }

    /** @test * */
    public function is_new_timestamp()
    {
        $timestep = "10";
        $targetTimestamp = "30";
        $ts = Carbon::create(2020, 04, 16, 13, 00, 0, null);
        $m1 = new Measure(['time' => $ts]);
        $m2 = new Measure(['time' => (clone $ts)->addMinutes($timestep)]);
        $m3 = new Measure(['time' => (clone $ts)->addMinutes(2 * $timestep)]);
        $m4 = new Measure(['time' => (clone $ts)->addMinutes(3 * $timestep)]);
        $m5 = new Measure(['time' => (clone $ts)->addMinutes(4 * $timestep)]);
        $m6 = new Measure(['time' => (clone $ts)->addMinutes(5 * $timestep)]);

        assertTrue(Measure::isNextTimestamp($m1->time, $targetTimestamp));
        assertFalse(Measure::isNextTimestamp($m2->time, $targetTimestamp));
        assertFalse(Measure::isNextTimestamp($m3->time, $targetTimestamp));

        assertTrue(Measure::isNextTimestamp($m4->time, $targetTimestamp));
        assertFalse(Measure::isNextTimestamp($m5->time, $targetTimestamp));
        assertFalse(Measure::isNextTimestamp($m6->time, $targetTimestamp));
    }

我应该如何摆脱这个错误?我在哪里调用 connection() ?

标签: phplaravelphpunit

解决方案


推荐阅读