Sooey

2015-02-05 00:27:48 +0900

Product Design

  • Are we making it better? by David of Basecamp
    • "A better way to think of hazy problems, like “how easy is it to get started with Basecamp?” or “is the query interface for Active Record as readable as can be?”, is to focus on mere progress instead: Are we making it better?"

Software

2015-02-03 20:11:35 +0900

Product Design

Team

Programming

Software

  • diasks2/pragmatic_segmenter
    • Pragmatic Segmenter is a rule-based sentence boundary detection gem that works out-of-the-box across many languages.

2014-12-31 12:11:47 +0900

Rails 4.2以降でストリーム(STDINなど)への出力を抑止・キャプチャする話。

Rails 4.1までに含まれるActiveSupportでは、Kernel#captureやそのエイリアスであるsilenceメソッドを利用することで、標準出力などへの出力内容を取得したり、出力を抑止することができていました。

これは、例えば「Herokuのdrainを監視する各種アドオン(TreasureDataやFlyDataなど)に対して、アプリがSTDOUTにJSONを出力することでデータを受け渡す」ような実装をしている場合に、テスト実行時などに出力を抑止したり出力内容を検証するようなケースで重宝していました。

Rails 4.2ではそれらのメソッドがスレッドセーフではないことを理由にDeprecatedとなり、将来的には削除されることとなりました。

今後は、上記のIssueでコメントされているRubyTapasで紹介されたコードなどをspec/supportに置いて参照するのが妥当かな、というのが現時点での認識です。

2014-12-23 13:27:24 +0900

rspec-mocksのSpyという機能を使うと、メソッドが想定した形で呼び出されたことの検証を、自然な順序で記述できるようになる。

ここでいう自然な順序とは、「検証用のコードを実行してから、テストコードを実行する」のではなく「テスト対象コードを実行した後で、検証用のコードを実行する」という形で記述できるようになる、ということを指す。

例えば、コントローラーのアクション内でサービスクラスのメソッドが呼び出されることを以下のようにテストしている場合、

というようになる。expectの記述が、SUT(テスト対象システム)であるget :showの呼び出しよりも前になくてはならない。

ここでSpyを利用すると、以下のようにテスト対象コードを実行した後でexpectによる検証を記述することができる。

テストに必要な前処理と検証用コードを明確に分離できるため、テストの意図がより伝わりやすくなると思う。