新年明けましておめでとうございます。
今年の抱負は人に恨まれないようにちゃんと仕事を調整する事です。
新年俺得ライブラリつくった
https://github.com/uzulla/mock_slim_client
Slim FrameworkはMock的な動作ができるのですが、UnitTestでPOSTしたり、帰ってきたHTMLを良い感じにつかう(特にテストとかでスクレイピングする)のが結構不便なのでつくりました。
非常にダーティーな実装ですが、POSTとかできます*1。例は以下。
<?php class myTest extends \PHPUnit_Framework_TestCase { use \Uzulla\MockSlimClient; // use by trait static function registrationRoute($app) { $app->get('/', function() use ($app){ //... }); // or \myApp::registrationRoute($app); } static function createSlim(){ return new \Slim\Slim([ 'templates.path' => TEMPLATES_DIR_PATH, 'view' => new \Slim\Views\Twig() ]); } public function testConfirmPost() { // 生のHTMLをとってくる $raw_html = $this->req('/'); // paquettg/php-html-parserを返す $dom = $this->req_dom('/post/form'); $this->assertTrue(!!$dom->find('input[name=name]')); // パラメタ付きPOSTもできます $input = http_build_query([ 'nickname'=>'testname' ]); $dom = $this->req_dom('/post/confirm', 'POST', $input); $this->assertEquals($test_name, $dom->find('div.nickname-preview', 0)->text); } }
まあ、これだとどういうことやねんという感じでしょうから、上のGitHubには無駄にサンプルアプリ付きでありますので、適当に動かしていただけます。
Packagistで公開してるので、奇特な方は簡単にご利用いただけます。まだリリース番号振ってませんが、しばらく使ってつかえるなって思ったら振ります。
https://packagist.org/packages/uzulla/mockslimclient
# composer.json { "require": { "uzulla/mockslimclient": "dev-master" } }
ということで
今年も宜しくお願い致します。
*1:もっとマシなコードにしたいのだが、どうやるべきか思いつかない。