【问题标题】:Laravel 5 Unit Testing and NamespacingLaravel 5 单元测试和命名空间
【发布时间】:2015-06-12 13:53:28
【问题描述】:

我遇到了一些关于 Laravel 5 中带有命名空间的 PHPUnit 的问题。我正在尝试对我的一条路线进行简单的测试,这当然会调用模型,但是在调用时我遇到了意外错误。

PHP 致命错误:在 'Eloquent' 类中找不到 /home/app/Models/User.php 在第 10 行

这是来自User.php的相关代码块

<?php

use Laravel\Cashier\Billable;
use Laravel\Cashier\Contracts\Billable as BillableContract;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends \Eloquent implements AuthenticatableContract, CanResetPasswordContract, BillableContract {

看来我在测试环境中遇到了一些命名空间问题。我不想更改我的模型,因为它与我的应用程序一样工作。

如何在不直接更改应用程序的情况下使 PHPUnit 环境与我的应用程序交互?

【问题讨论】:

  • 您可以将单元测试添加到问题中吗?

标签: php laravel namespaces phpunit


【解决方案1】:

我的猜测是这不是命名空间问题,而是你没有使用 Laravel 的基础测试类(无论是有意还是无意,因为与 Laravel 认为的规范有所偏差),或者如果你是以某种方式修改了它们,这样您就不会在测试中引导 Laravel 环境。 (描述您如何创建测试将有助于人们追踪这一点)

问题是 Laravel 中没有全局 Eloquent 类。但是,有一个 Eloquent 别名。如果您查看app.php 配置文件,您会看到一个别名数组。

#File: config\app.php
'aliases' => [
    //...
    'Eloquent'  => 'Illuminate\Database\Eloquent\Model',
    //...

Laravel 使用内置的 PHP 函数 class_alias 设置这些别名

class_alias('Illuminate\Database\Eloquent\Model', 'Eloquent');

这让您可以像使用类一样使用Eloquent。 (这实际上是通过class alias autoloader 的方式完成的)。

由于某种原因,这不会在您的测试环境中发生。如果您不知道原因,我会在您的测试开始时尝试以下操作

class_alias('Illuminate\Database\Eloquent\Model', 'Eloquent');

这将手动设置别名,这可以让您运行测试。 (但是,如果你在测试中使用 Laravel 模型和其他框架功能,你真的很想弄清楚为什么你的测试环境没有引导 Laravel 环境)

【讨论】:

    【解决方案2】:

    尝试在测试的 setUp 函数中添加 parent::setUp() 以确保正确设置测试环境。

    /**
     * Default preparation for each test
     *
     */
    public function setUp()
    {
        parent::setUp(); // Don't forget this!
    
        $this->prepareForTests();
    }
    

    【讨论】:

    • 其实Eloquent是全局命名空间中的别名。看起来框架在 OPs 测试环境中没有正确启动
    猜你喜欢
    • 2016-07-06
    • 2023-04-09
    • 2015-05-13
    • 2016-03-14
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多