UnitTest因附加属性而失败(Laravel)

时间:2016-04-18 23:50:42

标签: laravel eloquent phpunit

我有型号产品,它具有受保护的属性$ appends = ['category_name']。此类别名称由getCategoryNameAttribute函数设置。在我的浏览器中访问端点按预期工作,但是通过单元测试测试此端点会导致测试序列崩溃。

class Product extends Model
{

    protected $table = 'products';

    protected $fillable = [
        'name', 'category_id', 'durability_id'
    ];

    protected $appends = [
        'category_name'
    ];

    public function getCategoryNameAttribute()
    {
        return $this->category->name;
    }

    public function category()
    {
        return $this->belongsTo('App\Models\Category');
    }

}

我测试的端点显示了所有产品的列表(Product :: all())。当我删除appends属性或返回静态值(如1或'one')时,测试通过。

use Illuminate\Foundation\Testing\DatabaseTransactions;

class ProductTest extends TestCase
{
    use DatabaseTransactions;

    public function test_index_shows_a_list()
    {
        $this->visit('/api/v1/products');
    }
}

错误: 开始测试'ProductTest :: test_index_shows_a_list'。 PHP致命错误:达到了'100'的最大函数嵌套级别,正在中止!在第72行的app / vendor / laravel / framework / src / Illuminate / Support / Str.php中

我不确定问题是什么,因为我是单位测试的新手,但它可能与使用laravel关系有关...任何想法?

1 个答案:

答案 0 :(得分:0)

首先确保您已设置TestCase

public function __construct()
{
   parent::setup();
}

此错误消息特别来自XDebug扩展名。

确保通过xdebug增加了最大功能嵌套

打开/etc/php5/mods-available/xdebug.ini并添加xdebug.max_nesting_level = 200