在Laravel phpunit测试中获取请求以搜索不同的URL

时间:2019-02-06 21:52:46

标签: laravel get phpunit

我正在尝试在Laravel应用中为Note模型创建一个简单的phpunit测试。我只是想测试对特定笔记实例的get请求将显示该笔记的某些属性。

我有一个Note模型,工厂,控制器和路线。

模型

namespace App;
use Illuminate\Database\Eloquent\Model;

class Note extends Model
{
    protected $guarded = [];

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

工厂

use Faker\Generator as Faker;

$factory->define(App\Note::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence,
        'body' => $faker->paragraph,
    ];
});

路线

Route::get('/notes/{note}', 'NotesController@show');

控制器

namespace App\Http\Controllers;
use App\Note;
use Illuminate\Http\Request;


class NotesController extends Controller
{
      public function show(Note $note)
      {
         return view('notes.show', compact('note'));
      }
}

测试

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class NotesTest extends TestCase
{

    use WithFaker, RefreshDatabase;

    /** @test */
    public function a_user_can_view_a_note()
    {
        $this->withoutExceptionHandling();

        $note = factory('App\Note')->create();
        // dd($note->path());

        $this->get($note->path())
            ->assertSee($note->title)
            ->assertSee($note->body);
    }
}

运行a_user_can_view_a_note测试时,出现此错误:

  

1)测试\功能\注释测试:: a_user_can_view_a_note   Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:GET   http://shepherding.test/1

它不是在寻找http://shepherding.test/notes/1,而是在寻找http://shepherding.test/1


PS:dd($note->path());给出"/notes/1".

我可以将$this->get($note->path())替换为:

$this->get('/notes/' . $note->id);

或什至将其替换为该硬编码值:

$this->get('/notes/1');

但是测试一直在尝试获取http://shepherding.test/1

我不知道为什么将/notes/从get请求中剥离出来。

我还有其他用于索引的测试,并存储它们都可以正常工作。只是这个显示了这种行为。

0 个答案:

没有答案