【问题标题】:Why my test is not running the model observer?为什么我的测试没有运行模型观察者?
【发布时间】:2021-09-11 19:42:09
【问题描述】:

我在一个 laravel 项目中工作,我在更新数据时会做一些逻辑。为此,我在updating() 方法中利用了观察者模式。

这是我简化的 sn-ps:

ModuleObserver

public function updating($module)
{
    dd('This must be shown');
}

模块控制器

public function update(ModuleUpdateRequest $request, string $moduleId): ModuleResource
{
  try {
    $module = Module::findOrFail($moduleId);
  } catch (ModelNotFoundException $e) {
    throw new NotFoundHttpException('Module not found.');
  }

  $module->fill($request->all());
  $module->save();
}

ModuleControllerTest

public function testModuleUpdate()
{
  $module = factory(Module::class)->create(['name' => 'My Module']);
  $this->actingAs($this->user)->putJson('/modules/' . $module->id, [ 'name' => 'My Updated Module' ])->assertStatus(200);
}

测试通过 ok 而不是显示调试器行。

(我的观察者已正确加载到 AppServiceProvider 文件中,顺便说一句,它在测试上下文之外也能正常工作)

【问题讨论】:

    标签: laravel phpunit


    【解决方案1】:

    根据Laravel documentation

    当通过 Eloquent 发布批量更新时,保存、保存、更新和更新模型事件不会为更新的模型触发。这是因为在发布大规模更新时从未真正检索到模型。

    要确保触发模型事件,您可以使用模型属性...

    类似:

    $module->name = $request->input('name');
    $module->date = $request->input('date');
    // ...........
    $module->save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多