月別アーカイブ: 2012年4月

Test::Mojo::DOMを作った

 

Mojoliciousアプリの出力するDOMを詳細にテストするやつ。

https://github.com/jamadam/Test-Mojo-DOM

Test::Mojoだけだと、domのチェックはelement_exitsとelement_exits_notしかできないので、詳細なテストはcontent_*でやるか、DOMを取り出してからTest::Moreを使う。

$t->get_ok('/');
my $dom = $t->tx->res->dom;
is $dom->at('#hoge')->attrs('href'), 'http://example.com', 'right URL';

Test::Mojoと似た流れでDOMのテストもやりたい!

ということで、Test::Mojo::DOMを使うと下記のようにできるよ。APIは変わるかもだよ。

  use Test::Mojo::DOM;
  use Test::More tests => 35;

  my $t = Test::Mojo::DOM->new(MyApp->new);
  $t->get_ok('/')
      ->status_is(200)
      ->dom_inspector(sub {
          my $t = shift;
          $t->at('a')
              ->attr_is('href', '../')
              ->attr_isnt('href', './')
              ->attr_like('href', qr'\.\./')
              ->attr_unlike('href', qr'\.\./a')
              ->text_is('some link')
              ->text_isnt('some link2')
              ->text_like(qr'some')
              ->text_unlike(qr'some2')
              ->has_attr('href')
              ->has_attr('empty')
              ->has_attr_not('not_exists');
          $t->at('a')->get(1)
              ->text_is('some link2');
          $t->at('a:nth-child(2)')
              ->text_is('some link2');
          $t->at('a')->each(sub {
              my $t = shift;
              $t->text_like(qr{.});
              $t->text_unlike(qr{a});
              $t->attr_like('href', qr{.});
              $t->attr_unlike('href', qr{a});
          });
          $t->at('a')->parent->attr_is('id', 'some_p');
          $t->at('a')->parent->parent->attr_is('id', 'wrapper');
          $t->at('#some_p')->has_child('a');
          $t->at('#some_p2')->has_child_not('a');

          $t->at('#some_img')->has_class('class1');
          $t->at('#some_img')->has_class('class2');
          $t->at('#some_img')->has_class('class3');
          $t->at('#some_img')->has_class_not('class4');
      });

mojo-legacyのメンテナンスメモ

 

mojoの最新版をmojo-legacyにマージする自分用メモ。

 

mojoリポジトリのクローンで作業開始。

$ cd mojo
$ git checkout master
$ git pull upstream master
$ git pull upstream master --tags
$ git checkout mojo-legacy
$ git merge v2.82

…コンフリクトを直す。ついでにChangesも追記

… qr/( ~~ | // | //= )/で検索するなどして、新たなperl-5.10.x依存を排除。正規表現も注意。あと、${^PREMATCH}, ${^MATCH}, ${^POSTMATCH}も。

その後、テスト。

$ perlbrew use perl-5.8.7
$ export TEST_HYPNOTOAD=1
$ export TEST_TLS=1
$ export TEST_MORBO=1
$ export TEST_EV=1
$ export TEST_ONLINE=1
$ export TEST_CACHING=1
$ export TEST_IPV6=1
$ export TEST_PREFORK=1
$ export TEST_POD=1
$ prove -r t

…mojo-legacyリポジトリを差し換え

その後、コミット。

$ cd mojo-legacy
$ git add .
$ git add -u
$ git commit -m 'rebased on Mojolicious v2.82'