Laravel Testing : Call to undefined function App\Http\Controllers\get()

Meteor Newbie picture Meteor Newbie · Aug 24, 2017 · Viewed 7.8k times · Source

I am going through a Laravel tutorial and stuck at a "Call to undefined function" error. So far I have 20 Tests with 28 Assertions and only this test fails. I can't find my typo. Tell me please what source code do I have to add additionaly. I am new to Laravel.

λ vendor\bin\phpunit --filter a_user_can_filter_threads_according_to_a_channel
PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 409 ms, Memory: 14.00MB

There was 1 error:

1) Tests\Feature\ReadThreadsTest::a_user_can_filter_threads_according_to_a_channel
Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined function App\Http\Controllers\get()

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.

There must be a typo, but I can't find it.

ReadThreadsTest.php

/** @test */
public function a_user_can_filter_threads_according_to_a_channel()
{
    $channel = create('App\Channel');
    $threadInChannel = create('App\Thread', ['channel_id' => $channel->id]);
    $threadNotInChannel = create('App\Thread');

    $this->get('/threads/' . $channel->slug)
        ->assertSee($threadInChannel->title)
        ->assertDontSee($threadNotInChannel->title);
}

web.php

Route::get('threads/{channel}', 'ThreadsController@index');

Channel.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Channel extends Model
{
    public function getRouteKeyName()
    {
        return 'slug';
    }

    public function threads()
    {
        return $this->hasMany(Thread::class);
    }

}

ThreadController.php

public function index(Channel $channel)
{

    if ($channel->exists)
    {
        $threads = $channel->threads()->latest()-get();
    } else {
        $threads = Thread::latest()->get();
    }

    return view('threads.index', compact('threads'));
} 

Thread.php

<?php


namespace App;

use Illuminate\Database\Eloquent\Model;


class Thread extends Model
{

    protected $guarded = [];

    public function path()
    {
        return "/threads/{$this->channel->slug}/{$this->id}";
    }

    public function replies()
    {
        return $this->hasMany(Reply::class);
    }

    public function creator()
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function channel()
    {
        return $this->belongsTo(Channel::class);
    }

    public function addReply($reply)
    {
        $this->replies()->create($reply);
    }
}

Answer

Meteor Newbie picture Meteor Newbie · Aug 24, 2017

I found finaly my typo after few hours searching ...

this:

    $threads = $channel->threads()->latest()-get();

must be:

    $threads = $channel->threads()->latest()->get();

Now everything works.