lundi 12 février 2018

Mock object giving bad method call exception PHPUnit

To test below method

public function handle($loginDetails): User
{
    $authUser = $this->user->where('user_id', $loginDetails->id)->first();
    if (!$authUser) {
        $authUser = $this->user->create([
            'name' => $loginDetails->name,
            'email' => $loginDetails->email,
            'profile_image' => $loginDetails->avatar_original,
            'user_id' => $loginDetails->id
        ]);
    }

    return $authUser;
}

I am mocking and testing it as below

public function shouldHandleNewUser()
{
        $mockBuilder = $this->getMockBuilder(Builder::class)
            ->disableOriginalConstructor()
            ->setMethods(['first'])
            ->getMock();
        $mockBuilder->method('first')
            ->willReturn(null);

        $mockUser = $this->getMockBuilder(User::class)
            ->disableOriginalConstructor()
            ->setMethods(['where', 'create'])
            ->getMock();

        $mockUser->method('where')
            ->willReturn($mockBuilder);

        $mockUser->method('create')
            ->willReturn(new User());

        $loginDetails = new class {
            public $id = 1;
            public $name = 'testUser';
            public $email = 'test@test.com';
            public $avatar_original = 'http://someurl.com/image.jpg';
        };

        $registrationHandler = new RegistrationHandler($mockUser);
        $this->assertInstanceOf(User::class, $registrationHandler->handle($loginDetails));
}

When it reaches to the create method it is throwing

PHPUnit_Framework_MockObject_BadMethodCallException

What I am doing wrong here ?

Thanks



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire