岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

Pinto公開に向けて #21 ― HTTPレイヤのテストを共通化するテスト

あらすじ

Pintoというソーシャルブックマークサービス、およびPintoBeansというWebアプリケーションフレームワークRubyで開発中です。その際に気づいたことや工夫した点などを、備忘録を兼ねて書いています。その21回目です。

HTTPレイヤのテストを書くのは大変

先日よりHTTPレイヤのテストをちまちまと書いています。感想は「こんなもの二度と書きたくない」。テスト項目多すぎ。URLを追加するたびにこんなテストを書くのは嫌すぎる。

だから共通化した

とはいえ、うまく共通化すれば、同じテストを何度も書く必要はないでしょう。というわけで、こんな風にしてみました。

$spec = {}
$spec[:allowed_methods]  = 'GET, HEAD, OPTIONS'
$spec[:host]             = 'pinto.jp'
$spec[:path]             = '/'
$spec[:multiple_choices] = true
$spec[:content_type]     = 'XHTML'
$spec[:expires]          = 60 * 60 * 6

$LOAD_PATH << '../'
require 'pinto_beans/spec/restful'
refactored specs · iwamot/pinto@3af521f · GitHub

これはトップページのテスト。別ページのテストが必要になったら、$specをちょっと編集する感じです。本当はグローバル変数($spec)を使いたくないのですが、これ以外の方法が浮かびませんでした。

RESTfulなふるまいとして共通化できる部分は:

フレームワーク側)に押しつけています。

私はどこに向かっているのか

普通はこんなことしませんよね。友人に「ソーシャルブックマークサービスを開発したい」と相談されたら「Rails使ってさっさとリリースしたら」と答えると思います。

ただ、私のゴールはソーシャルブックマークサービスの開発でも公開でもなく、自分でもよくわからない、どこか遠いところにあります。Railsでサクっと作ったアプリケーションを公開しても、私のプログラマ心は満たされない。そういう病気なんです。