运行测试时未触发事件

时间:2019-01-24 21:25:20

标签: laravel phpunit

我正在尝试为一种模型测试我的存储方法,并且测试没有调度使它们失败的事件。

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为真。

1 个答案:

答案 0 :(得分:0)

您的$project尚无ID,因为您正在使用make(),这并未将模型存储在数据库中。

您应该捕获api调用的响应,并比较返回的$project的api的ID,而不要与出厂的$project进行比较