我有一个联系页面,其中select
下拉列表包含所需的帮助类型。如果我通过浏览器(任何浏览器:Firefox,Chrome,Edge ...)浏览到该页面,则该下拉列表将正确填充,但是尝试出于测试目的使用Laravel Dusk浏览该页面,则该下拉列表为空。
这是测试班
class ContactTest extends DuskTestCase
{
use DatabaseMigrations, DatabaseTransactions;
public function setUp(): void
{
parent::setUp();
$this->artisan('db:seed');
}
/**
* @test
* @throws Throwable
*/
public function send_a_contact_message()
{
// check if the types' table is populated
// this test passes, then the table is populated
$this->assertDatabaseHas( 'contact_types', [
'name' => 'info'
] );
// fill and submit the form
$this->browse(function (Browser $browser) {
$browser->visit('/contact')
->select('type', 'info')
->type('#c_email', 'alhazred@local.test')
->type('object', 'Contact test')
->type('message', 'Contact test text message')
->click('#confirm_btn');
});
// check if an entry has been stored into the database
// this test fails saying that the table is empty
$this->assertDatabaseHas( 'contact_messages', [
'type' => 'info',
'email' => 'alhazred@local.test',
'object' => 'Contact test',
'message' => 'Contact test text message'
] );
}
}
这是create()
内的ContactMessagesController
函数
public function create()
{
$msg_types = ContactType::all()->sortBy('id');
$types = [];
foreach ($msg_types as $msg_type)
{
$types[$msg_type->name] = trans('contact.type_'.$msg_type->name);
}
return view('contact_us', compact('types'));
}
这就是我在视图内部创建下拉菜单的方式
<select name="type" id="type" class="custom-select">
@foreach($types as $id => $text)
<option value="{{ $id }}">{{ $text }}</option>
@endforeach
</select>
我确定问题出在下拉列表中,因为我已经将dd($types);
行放在create()
函数内,而return
和Dusk在失败显示一个空数组,在手动浏览时会显示已填充的数组。
此声明也失败
$browser->visit('/contact')
->assertSee('General Information');
其中General Information
是应显示为info
类型的文本,该文本确认没有填充下拉列表。
使用常规浏览器而不使用Dusk进入页面时,为什么会填充下拉列表?
Laravel 5.8-黄昏5-PHP 7.2.14