Laravel Assert Redirect с регулярным выражением - PullRequest
0 голосов
/ 09 мая 2019

Я недавно пробовал TDD с laravel, и я хочу утверждать, что перенаправление привело пользователя к URL-адресу с целочисленным параметром.Интересно, смогу ли я использовать регулярные выражения для перехвата всех положительных целых чисел.

Я запускаю это приложение с каркасом laravel 5.8 и знаю, что параметр url равен 1, потому что я обновляю базу данных для каждого теста, поэтомуустановка URL-адреса перенаправления как /projects/1 работает, но такое жесткое кодирование кажется странным.

Я приложил блок кода, для которого я пытался использовать регулярное выражение, но это не работает

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

        //If i am logged in
        $this->signIn(); // A helper fxn in the model

        //If i hit the create url, i get a page there
        $this->get('/projects/create')->assertStatus(200);

        // Assumming the form is ready, if i get the form data
        $attributes = [
            'title' => $this->faker->sentence,
            'description' => $this->faker->paragraph
        ];

        //If we submit the form data, check that we get redirected to the projects path
        //$this->post('/projects', $attributes)->assertRedirect('/projects/1');// Currently working
        $this->post('/projects', $attributes)->assertRedirect('/^projects/\d+');

        // check that the database has the data we just submitted
        $this->assertDatabaseHas('projects', $attributes);

        // Check that we the title of the project gets rendered on the projects page 
        $this->get('/projects')->assertSee($attributes['title']);

    }

Я ожидал, что тест обработает аргумент в assertRedirect('/^projects/\d+'); как регулярное выражение, а затем передаст любой URL-адрес, такой как /projects/1, пока он заканчивается числом, но он принимает его как необработанную строку и ожидает URL-адрес /^projects/\d+

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 09 мая 2019

После просмотра урока Джеффри Вей он рассказал о том, как решить эту проблему. Вот как он решает ситуацию

//If we submit the form data, 
$response = $this->post('/projects', $attributes);

//Get the project we just created
$project = \App\Project::where($attributes)->first();

// Check that we get redirected to the project's path
$response->assertRedirect('/projects/'.$project->id);
...