Dusk не выполняет щелчок по кнопке и периодически обновляет поле содержимого

#laravel #laravel-5 #laravel-dusk

#laravel #laravel-5 #laravel-dusk

Вопрос:

У меня есть две проблемы с моим тестовым примером dusk, которые сводят меня с ума, поскольку я не могу понять, что я делаю неправильно. Мой тестовый пример:

 /** @test */
public function update_a_job()
{
    $this->browse(function (Browser $browser)
    {
        $browser
            ->visit(route('jobs-overview', ['project' => 1, 'customerprofile' => 1]))
            ->click('@dusk-edit-job')
            ->type('jobOutcome', 'Renamed job outcome.')
            ->type('@dusk-job-purpose-contenteditable-1', 'Renamed job purpose.')
            ->select('@dusk-job-purpose-rating-1', 5)
            ->select('jobImportance', 5)
            ->select('jobFrustration', 5)
            ->click('@dusk-update-job')
            ->screenshot('current_state')
            ->dump()
            ->assertSee('Renamed job outcome.')
            ->assertSee('Renamed job purpose.');
    });
}
  

Проблемы заключаются в:

->click('@dusk-update-job') никогда не выполняется.

Соответствующий раздел dump ():

 <div class="form-group row">n
    <div class="col-6">n
        <a href="http://ps.dev/en/app/projects/1/customerprofiles/1/jobs" class="btn btn-default waves-effect waves-light">Back</a>n
    </div>n
    <div class="col-6 text-right">n
        <button dusk="dusk-update-job" class="btn btn-default waves-effect waves-light">Next</button>n
    </div>n
</div>n
  

->type('@dusk-job-purpose-contenteditable-1', 'Renamed job purpose.') периодически обновляется.

Соответствующий раздел dump ():

 <ul id="jobPurposeList" class="list-group">n
    <li class="list-group-item d-flex justify-content-between flex-nowrap">n
        <input type="hidden" name="jobPurpose[1][db]" value="1" />n
        <span class="jobPurposeListItem flex-grow-1 mr-auto" contenteditable="true" dusk="dusk-job-purpose-contenteditable-1"n
            <input type="hidden" name="jobPurpose[1][purpose]" value="A first job purpose." dusk="dusk-job-purpose-value-1" />A first job purpose.n
        </span>n
            <div id="jobPurposeOptions">n
                <select name="jobPurpose[1][rating]" class=" form-control" required="" dusk="dusk-job-purpose-rating-1">n
                    <option value="" selected="" disabled="">---</option>n
                    <option value="1">Not important</option>n
                    <option value="2" selected="">Slightly Important</option>n
                    <option value="3">Moderately important</option>n
                    <option value="4">Important</option>n
                    <option value="5">Very important</option>n
                </select>n
            </div>n
            <span class="deleteJobPurposeFromPurposeList">n
            <i class="fa fa-trash-o"></i>n
        </span>n
    </li>n
</ul>n
  

У кого-нибудь есть идея, что я делаю не так, как я мог бы дополнительно устранить проблему или что я мог бы сделать для оптимизации тестового примера?

Комментарии:

1. Можете ли вы создать минимальное приложение для воспроизведения проблемы и загрузить его куда-нибудь?

Ответ №1:

Я получил несколько ценных отзывов на другой доске обсуждений. Наконец, я решил с:

В итоге я получил:

 /** @test */
public function update_a_job()
{
    $this->browse(function (Browser $browser)
    {
        $browser
            ->visit(route('jobs-overview', ['project' => 1, 'customerprofile' => 1]))
            ->click('@dusk-edit-job')
            ->type('jobOutcome', 'Renamed job outcome.')
            ->keys('@dusk-job-purpose-contenteditable-1', 'Updated: ')
            ->select('@dusk-job-purpose-rating-1', 5)
            ->select('jobImportance', 5)
            ->select('jobFrustration', 5)
            ->press('@dusk-update-job')
            ->assertSee('Renamed job outcome.')
            ->assertSee('Updated: A first job purpose.');
    });
}
  

Извлеченные уроки:

  • Существует отличный инструмент под названием Laravel TestTools, который также можно использовать для отладки.
  • Проверьте, нужно ли применять метод Dusks click () или press().