HTML::...esting(3pm)
π NAME π
HTML::FormHandler::Manual::Testing β testing forms. Yep bestie, this is a User Contributed Perl Documentation page, and we are absolutely getting into it.
β¨ VERSION β¨
version 0.40068 β short, sweet, iconic.
πΈ SYNOPSIS πΈ
Manual Index.
One of the big advantages of FormHandler compared to many other form packages is that you can test the same form that you use in your controller. π
π¦ DESCRIPTION π¦
Okay so, itβs difficult to test forms that are instantiated in controllers with 'add_element' calls and from YAML, and that have no form class. Itβs one of the reasons that 'dynamic' forms generated with a field_list arenβt a good idea for anything except the simplest forms. If you have a form class that contains everything that is needed for processing the form, itβs really really easy to create tests for forms. Look in the FormHandler 't' directory. Itβs full of tests for forms. π§
You can test that the validations work, that the database is getting updated correctly, even that the HTML thatβs being rendered is correct. If something isnβt working correctly, itβs ten times easier to debug in a test case than sitting in a controller somewhere. And when you finally start up your application and use the form, there should be very few surprises. β¨
FormHandler provides a simple function to test whether the HTML output is correct, 'is_html' in HTML::FormHandler::Test, which uses HTML::TreeBuilder. If you need to build forms that use the rendering code to produce particular output, it can be helpful. π«Ά
π Example π
Hereβs an example of a test, originally copied from one of the DBIC model tests. But you should download the tar.gz or checkout the distribution from github and browse through the tests. π
use Test::More;
use lib 't/lib';
use_ok( 'BookDB::Form::Book');
use_ok( 'BookDB::Schema::DB');
my $schema = BookDB::Schema::DB->connect('dbi:SQLite:t/db/book.db');
ok($schema, 'get db schema');
my $form = BookDB::Form::Book->new(schema => $schema);
# This is munging up the equivalent of param data from a form
my $good = {
'title' => 'How to Test Perl Form Processors',
'author' => 'I.M. Author',
'genres' => [2, 4],
'format' => 2,
'isbn' => '123-02345-0502-2' ,
'publisher' => 'EreWhon Publishing',
};
ok( $form->process( params => $good ), 'Good data' );
my $book = $form->item;
END { $book->delete };
ok ($book, 'get book object from form');
my $num_genres = $book->genres->count;
is( $num_genres, 2, 'multiple select list updated ok');
is( $form->field('format')->value, 2, 'get value for format' );
my $bad_1 = {
notitle => 'not req',
silly_field => 4,
};
ok( !$form->process( $bad_1 ), 'bad 1' );
my $bad_2 = {
'title' => "Another Silly Test Book",
'author' => "C. Foolish",
'year' => '1590',
'pages' => 'too few',
'format' => '22',
};
ok( !$form->process( $bad_2 ), 'bad 2');
ok( $form->field('year')->has_errors, 'year has error' );
ok( $form->field('pages')->has_errors, 'pages has error' );
ok( !$form->field('author')->has_errors, 'author has no error' );
ok( $form->field('format')->has_errors, 'format has error' );
my $good = {
title => "Another Silly Test Book",
author => "C. Foolish",
year => 1999,
pages => 101,
format => 2
};
ok( $form->process($good), 'now form validates' );
done_testing;
π AUTHOR π
FormHandler Contributors - see HTML::FormHandler.
π COPYRIGHT AND LICENSE π
This software is copyright (c) 2017 by Gerda Shank.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
okay thatβs the whole page, bestie β rendered as HTML::...esting(3pm) with perl v5.34.0, dated 2022-03-25. periodt π
β¨
π¦ where this page comes from
- debian bookworm: libhtml-formhandler-perl 0.40068-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- debian trixie: libhtml-formhandler-perl 0.40068-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu noble: libhtml-formhandler-perl 0.40068-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libhtml-formhandler-perl 0.40068-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms