【问题标题】:Function not firing when I run a test运行测试时功能未触发
【发布时间】:2019-11-19 19:09:13
【问题描述】:

我是 Laravel 的新手,所以我对自己在做什么只有一个模糊的概念。我正在做一个功能测试和一个我知道当我使用邮递员测试 api 时会触发的功能,但在测试期间不会触发。这是测试

public function testVerify(){
        $this->createTestUserParams();
        $response = $this->post(route('register'), $this->user_params);
        $response->assertOk();
        $user = User::where('email','test@gmail.com')->first();
        if($user){ 
            $token = $user->verifyUser->token;
            $id = $user->verifyUser->user_id;
            $response2 = $this->post(route('email.customVerify'), ['user_id' => $id, 'token' => $token]);
            $response2->assertOk();

            //$user->markEmailAsVerified();
            $this->assertNotNull($user->email_verified_at); 
        }else{
            $this->fail('should find a user');
        }
    }


这是路由控制器指向的函数的代码

public function customVerify(Request $request){
        if(!isset($request->user_id)){
            return response()->json(['message' => 'No user ID'],400);
        }
        if(!isset($request->token)){
            return response()->json(['message' => 'No user token'],400);
        }
        $user = User::where('id',$request->user_id)->first();

        if($user == null){
            return response()->json(['message' => 'Bad User Id'],400);
        }
        if ($user->hasVerifiedEmail()) {
            return response()->json(['message' => 'Already verified'],400);
        }

        if($request->token == $user->verifyUser->token){
            if($user->markEmailAsVerified()){
                event(new Verified($user));
                VerifyUser::where('user_id',$user->verifyUser->user_id)->first()->delete();
                return response()->json(['message' => 'Everything is swell'],200);

            }
        }else{
            return response()->json(['message' => 'Bad token'],400);

        }
    }

我的问题是 email_verified_at 字段不应该返回 null。

奇怪的是 $response->assertOk();只有当 markEmailAsVerified() 函数成功触发时,响应才会正常,否则响应不会是代码 200。并且 markEmailAsVerified() 函数正在做它应该做的事情,因为当我在测试中自己调用它时,它被注释出来,测试恢复正常。

如果有帮助,我正在使用护照库进行身份验证。

【问题讨论】:

    标签: laravel testing


    【解决方案1】:

    尝试获取用户的新实例?

    $user = $user->fresh();
    $this->assertNotNull($user->email_verified_at);
    

    【讨论】:

    • 谢谢,成功了。我不知道雄辩的模型会像那样不同步。
    • @MichaelRomero 在您收到满意的答案时将答案标记为“已回答”。
    猜你喜欢
    • 2019-06-18
    • 2019-02-11
    • 2012-12-29
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多