我有型号产品,它具有受保护的属性$ 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关系有关...任何想法?
答案 0 :(得分:0)
首先确保您已设置TestCase
public function __construct()
{
parent::setup();
}
此错误消息特别来自XDebug扩展名。
确保通过xdebug增加了最大功能嵌套
打开/etc/php5/mods-available/xdebug.ini
并添加xdebug.max_nesting_level = 200