唯一ぬにの盾
今は亡きWiseknot社の同僚であった「三度の飯より四度の飯、Javascriptはもっと好きです。」でお馴染みの@kjirouが一ヶ月来てくれる事になった。
また、アリウープ様にお願いしていた件もCakePHP2実践入門の著者の一人でもある@kaz_29さんが参戦してくださることになった。
「もうついたのか!」「はやい!」「きた!盾きた!」「これで勝つる!」と大歓迎状態だった。哀れにも@komagataは盾の役目を果たせず死んでいた近くで素早くフラッシュ(略
軽く発生ポイント
俺「あのポイント関連の処理ってどこでやってるの?」
@kjirou「あー、あれは共通化されてないからどっちかは処理されてないんだけど、片方は"軽く発生ポイント"でやっ(略」
俺「軽く?・・・何?」
@kjirou「だからカルクハッセイポイントクラスで」
俺「あー、Calculation?ちょwwwww CalcHasseiPointかよwwww。英語日本語英語のクラス名をさも一般名詞みたいに日常会話に混ぜないでよwwww」
@kjirou「いやそんなんこのコードの中じゃ普通でしょ、それより酷いのがこっちの処(略」
Testing Testing Testing!
大量メール配信の部分もヤバイということで@kaz_29さんがSimpleTest(CakePHP1.3なのでPHPUnitじゃないところがまたダルいが)でテストを書き始めてくださった。
@kjirouも複雑怪奇な仕様と実装をGithub Wikiにまとめながらどんどんコードを書いてる。
@hrysdは先日仕込んだMailLoggerから容赦なくNotice, Warnningが飛んでくるのでそれを潰すのを担当。
盛り上がって来やがった。
強引なEnd To Endテスト
app/tests/helper.php:
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class CakePHPSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase
{
protected function assertNoError()
{
$html = $this->getHtmlSource();
$patterns = array(
'/<b>Fatal Error<\/b> \(256\)/',
'/<b>Warning<\/b> \(512\)/',
'/<b>Notice<\/b> \(1024\)/'
);
$result = 0;
foreach ($patterns as $pattern) {
$result += preg_match($pattern, $html);
}
$this->assertEquals($result, 0);
}
}
「とにかく普通に画面にエラーが出てる」
という問題を直すためにCakePHP1.3が出力するエラーを確かめるための強引なAssertionを作成。
app/tests/integrations/RegularOrdersTest.php:
<?php
require_once 'helper.php';
class RegularOrdersTest extends CakePHPSeleniumTestCase
{
protected function setUp()
{
$this->setBrowser('*firefox');
$this->setBrowserUrl('http://xxxxxxxxxx/');
}
public function testIndexTitle()
{
$this->open('/regular_orders');
$this->assertTitle('管理画面');
$this->assertNoError();
}
}
こんな感じで使う。
PHPUnitのソース追ってましたが、開発がかなり活発。APIとマイナーバージョンがどんどん変わってく。そんなに頑張るとハゲるぞセバスチャン。
まだJenkinsに怒られるけど来週には環境が整うはず。強引にCIに乗せようと思えば乗るもんだなあという感じ。
PHPMatsuri
PHPMatsuri2012行きます。基本、Hackathonだそうなのでレガシーに役立つ何かが作れればなーと思います。
関連:レガシーPHP改善日記シリーズ