Havocbringer

Havocbringer

Member Since 4 Months Ago

Experience Points 170
Experience
Level
Lessons Completed 1
Lessons
Completed
Best Reply Awards 0
Best Answer
Awards
  • Start Your Engines Achievement

    Start Your Engines

    Earned once you have completed your first Laracasts lesson.

  • First Thousand Achievement

    First Thousand

    Earned once you have earned your first 1000 experience points.

  • One Year Member Achievement

    One Year Member

    Earned when you have been with Laracasts for 1 year.

  • Two Year Member Achievement

    Two Year Member

    Earned when you have been with Laracasts for 2 years.

  • Three Year Member Achievement

    Three Year Member

    Earned when you have been with Laracasts for 3 years.

  • Four Year Member Achievement

    Four Year Member

    Earned when you have been with Laracasts for 4 years.

  • Five Year Member Achievement

    Five Year Member

    Earned when you have been with Laracasts for 5 years.

  • School In Session Achievement

    School In Session

    Earned when at least one Laracasts series has been fully completed.

  • Welcome To The Community Achievement

    Welcome To The Community

    Earned after your first post on the Laracasts forum.

  • Full Time Learner Achievement

    Full Time Learner

    Earned once 100 Laracasts lessons have been completed.

  • Pay It Forward Achievement

    Pay It Forward

    Earned once you receive your first "Best Reply" award on the Laracasts forum.

  • Subscriber Achievement

    Subscriber

    Earned if you are a paying Laracasts subscriber.

  • Lifer Achievement

    Lifer

    Earned if you have a lifetime subscription to Laracasts.

  • Laracasts Evangelist Achievement

    Laracasts Evangelist

    Earned if you share a link to Laracasts on social media. Please email [email protected] with your username and post URL to be awarded this badge.

  • Chatty Cathy Achievement

    Chatty Cathy

    Earned once you have achieved 500 forum replies.

  • Laracasts Veteran Achievement

    Laracasts Veteran

    Earned once your experience points passes 100,000.

  • Ten Thousand Strong Achievement

    Ten Thousand Strong

    Earned once your experience points hits 10,000.

  • Laracasts Master Achievement

    Laracasts Master

    Earned once 1000 Laracasts lessons have been completed.

  • Laracasts Tutor Achievement

    Laracasts Tutor

    Earned once your "Best Reply" award count is 100 or more.

  • Laracasts Sensei Achievement

    Laracasts Sensei

    Earned once your experience points passes 1 million.

  • Top 50 Achievement

    Top 50

    Earned once your experience points ranks in the top 50 of all Laracasts users.

14 Jun
4 months ago

Havocbringer left a reply on Mocking Eloquent Queries

That's what I was afraid of ... So the best option remains to separate the DB extraction and just test the methods independently?

Havocbringer left a reply on Mocking Eloquent Queries

No, this is a simplified example, I am just trying to get it to work.

I want to be able to test methods that call the database internally. In order to be able to do so, I want to intercept the DB calls by using Mockery.

I have no problems in calling the actual test database but that would not be "unit testing".

Havocbringer started a new conversation Mocking Eloquent Queries

Hello guys,

I am trying to catch up with Unit Tests. The problem is, 99% of our DB queries are using static methods of the Eloquent models, e.g.: User::join(...)->where(...)->get()

Is there any way to mock these DB calls? I seem to be hitting a rock with PHPUnit and Mockery.

Here's an example (everything is deliberately crammed inside a single method):

/** @test */
public function example()
{
    $mockedUser = \Mockery::mock(\App\Models\Admin\User::class);
    $this->app->instance(\App\Models\Admin\User::class, $mockedUser);
    $mockedBuilder = \Mockery::mock(\Illuminate\Database\Eloquent\Builder::class);
    $this->app->instance(\Illuminate\Database\Eloquent\Builder::class, $mockedUser);
    $mockedUser->shouldReceive('where')->with('id',5)->andReturn($mockedBuilder);

    $emptyUser = new \App\Models\Admin\User();
    $emptyUser->id = 2;

    $mockedBuilder->shouldReceive('first')->once()->andReturn($emptyUser);
    $newUser = \App\Models\Admin\User::where('id',5)->first();
    $this->assertEquals($emptyUser->id, $newUser->id);
}

What am I doing wrong?