使用SQLite测试数据库时,Laravel 5.4 ModelNotFoundException

时间:2017-11-29 10:30:39

标签: laravel sqlite testing phpunit laravel-5.4

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

  

1)Tests \ Feature \ ParseAccountingFilesTest :: testExample
  │/中间件/ ValidatePostSize.php(27):   照亮\路由\ Pipeline->照亮\ r   Illuminate \ Database \ Eloquent \ ModelNotFoundException:无查询结果   for model [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>

1 个答案:

答案 0 :(得分:0)

我真的不确定为什么会出现这个错误,但是之前我有一个类似的测试设置与Laravel 5.3一起工作。

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