【问题标题】:Events not being fired when running tests运行测试时未触发事件
【发布时间】:2019-06-18 17:06:30
【问题描述】:

我正在尝试为我的一个模型测试我的 store 方法,但测试没有调度导致它们失败的事件。

public function store(StoreProject $request)
    {
        Log::info($request);
        $project = Project::create([
            'name' => $request->name,
            'created_by' => $request->created_by
        ]);

        //TODO email user about project

        event(new ProjectCreated($project));

        return $project;
    }

我有 ProjectCreated 事件,该事件将用于使用某种套接字服务来通知其他人。

public function a_project_emits_a_project_created_event()
    {
        Event::fake();

        $this->signIn($user = factory(User::class)->create());

        $project = factory(Project::class)->make(['created_by' => $user->id]);
        $this->json('POST','/api/v1/projects',$project->toArray());

        Event::assertDispatched(ProjectCreated::class, function ($e) use ($project) {
            return $e->project->id === $project->id;
        });
    }

我收到此错误,但不知道为什么,因为它应该是真的。

未调度预期的 [App\Events\ProjectCreated] 事件。 ✖ 断言 false 为 true 失败。

【问题讨论】:

    标签: laravel phpunit


    【解决方案1】:

    您的 $project 还没有 id,因为您使用的是 make() 这不是将模型存储在数据库中。

    您应该从您的 api 调用中获取响应并比较返回的 api 中的 ID $project,而不是与您的工厂制造的 $project 进行比较

    【讨论】:

    • 我不敢相信我没有看到这个。我试图将事件移动到模型的观察者中,但我收到一个错误,表明事件没有被触发。
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2020-01-07
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多