Laravel Dusk,选择下拉列表未填充

时间:2019-05-18 10:33:02

标签: laravel laravel-dusk

我有一个联系页面,其中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

0 个答案:

没有答案