Test::Mojoでformの値を取得する

submitボタンを大体エミュレートしてpost_form_okに値を渡したい時に、以下のようにした。

    $t->get_ok('/form');

    my $res = $t->tx->res;
    my $first = $res->dom->find('form')->first;

    my %values;
    $first->find('input')->each(
        sub {
            my ($e) = @_;
            if ( $e->attrs->{type} ne 'submit' ) {
                $values{$e->attrs->{name}} = $e->attrs->{value};                                                                           
            }
        }
    );
    $first->find('textarea')->each(
        sub {
            my ($e) = @_;
            $values{$e->attrs->{name}} = $e->text;
        }
    );

    $t->post_form_ok('/form', {
        %values,
        submit => '登録する',
    });