【问题标题】:Laravel 5.4 ModelNotFoundException when testing database with SQLite使用 SQLite 测试数据库时 Laravel 5.4 ModelNotFoundException
【发布时间】:2018-05-13 00:46:47
【问题描述】:

我在 Laravel 5.4 中的功能测试遇到了问题。每当我尝试使用 SQLite 内存配置运行我的数据库测试时,我都会收到此错误:

1) 测试\功能\ParseAccountingFilesTest::testExample
│/中间件/ValidatePostSize.php(27): 照亮\路由\管道->照亮\R Illuminate\Database\Eloquent\ModelNotFoundException:没有查询结果 对于模型 [App\QueuedAction] 1

我认为奇怪的是,据我所知,这个错误通常只在查询构建器使用 -OrFail() 方法之一时才会遇到。当使用数据库队列驱动程序和 MySQL 作为数据库驱动程序时,我的代码在测试之外工作得非常好。我调试了这个问题,发现是由下面的类构造函数中的如下语句引起的:

$this->scheduledAction = $action;

这个错误对我来说毫无意义。应该不涉及查询,只有简单的分配。此类用作实际作业类的简单父类,以跟踪已排队的操作。

abstract class SchedulesOnce implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $scheduledAction;

    public function __construct(string $id, string $type)
    {
        $action = new QueuedAction();
        $action->id = $id;
        $action->type = $type;
        $action->save();
        $this->scheduledAction = $action;
    }

    // Execute the job
    public function handle()
    {
        $this->execute();

        // Delete the queue reservation
        $this->scheduledAction->delete();
    }

    // Child functionality
    protected abstract function execute();
}

这是我的 phpunit.xml 中的相关行

<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>

【问题讨论】:

    标签: laravel sqlite testing phpunit laravel-5.4


    【解决方案1】:

    我真的不确定为什么会出现这个错误,但早些时候我有一个类似的测试设置与 Laravel 5.3 一起使用。

    从 5.4 升级到 5.5 似乎解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2017-06-13
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2017-09-26
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多