#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().