手を抜いたモデル分離
MyApp::Webとか::APIとか::CLIとか作らないで
モデル触れてテストも出来てかつcliからも触れればいいならこんなんでもいいのだろうか
- アプリ名
AutoTest
- Userモデル
sub create_user { my ($self, $args) = @_; if ( validate_name($args->{name}) ) { $self->create($args); return 1; } return undef; } sub validate_name { my $name = shift; return $name =~ /^[a-zA-Z0-9_-]+$/; }
- コントローラ
# good sample begin sub create_user :Local { my ( $self, $c ) = @_; if ($c->model('DBIC::User')->create_user($c->req->params) ) { return $c->stash(template => 'index.tt'); } return $c->res->body('died'); } #good sample end #bad sample begin sub create_user_bad :Local { my ( $self, $c ) = @_; my $name = $c->req->param('name'); if ( validate($name) ) { $c->model('DBIC::User')->create({ name => $name,#age,sex... }); } else { return $c->res->body('died'); } } sub validate_name { my $name = shift; return $name =~ /^[a-zA-Z0-9_-]+$/; } #bad sample end
- テストコード
# begin test! use_ok 'AutoTest::Schema'; my $yaml = 'autotest.yaml'; ok ( my $config = LoadFile($yaml) ); my $db = $config->{'Model::DBIC'}->{connect_info}; ok $db; my $schema = AutoTest::Schema->connection(@$db); ok $schema; sub User { $schema->resultset('User') }; ok User; my $user_ok = User->create_user({ name => 'user_ok', age => 9, sex => 1, }); is ($user_ok, 1, 'user create success'); my $user_ng = User->create_user({ name => 'user ng false because space', age => 9, sex => 1, }); is ($user_ng, undef, 'user create failed');
駄目なのかな。