我正在尝试创建一些测试.
这是我的测试类:
class ExampleTest extends TestCase { public function setUp() { parent::setUp(); Artisan::call('migrate'); $this->seed(); Auth::loginUsingId(1); } public function testActionUpdateNew() { $action = new Action(Array()); $action->save(); var_dump($action->id); Action::with('reponses','contact','user','etudiant','entreprise','etude')->findOrFail($action->id); } public function testEtudes() { $etudes=Etude::all()->toArray(); $this->assertCount(10,$etudes,"Nombre d'études incorrectes"); $numEtudes=count($etudes); //Buggy part $etude= Etude::create(Array()); var_dump($etude->id); $etudes=Etude::all()->toArray(); $this->assertCount(11,"Nombre d'études incorrectes"); //10+1 should equal to 11 but it hasnt updated } }
没有通过的测试是第二个:我计算开头的10个雄辩的对象练习曲的数量,然后我在数据库中添加一个练习曲(使用Etude :: create()),创建对象,因为$etude-> id给出了一个实数.但是,Etude的数量还没有更新.
当我从Action :: with(‘reponses’,…)中的热切加载中删除’etude’时,问题就消失了
这是Action类中的练习曲关系:
public function etude() { return $this->belongsTo('Etude'); }
你们有没有想过如果laravel中的急切加载会有这种奇怪的行为以及如何解决这个问题?
编辑
我发现用(‘etude’)调用可以删除注册到Eloquent模型的事件:
启动练习方法:
public static function boot() { parent::boot(); static::creating(function($etude) { var_dump("creating etude"); //This doesn't get executed even when I run Etude::create(Array()); } ); }
因此,如果我在testEtudes的开头添加Etude :: boot(),它会再次起作用.这仍然很奇怪.
在Laravel测试中,事件调度程序在每次测试之间重置,但模型仍然只启动一次,因为它们过着非常独立的生活.这意味着在每次测试之间,模型侦听器都会被删除但从不重新注册.解决方案是不使用boot()来注册模型事件,而是将它们放在一个单独的文件中 – 服务提供者或app / start / global.PHP中包含的文件(app / events.PHP是常见的) .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。