大江戸Ruby会議06 トーク資料
はじめに RSpecって結構「RSpecらしく書くこと」を求められたりします。 たとえば、describeやcontextでしっかりグループを分けましょう、再利用するデータはletやsubjectに切り出しましょう、ひとつのexample(it)の中でテストするのはひとつの項目だけにしましょう、等々の方針です。 よくあるのが「Better Specsを読んで、こんなふうに書くようにしましょう!」っていうパターンですね。 Better Specs しかし僕の場合、最近は「そこまでがんばってキレイにしなくてもいいのでは?」と考えるようになってきています。 その結果、テストコードがだんだん雑になってきています。 というわけで、この記事では最近僕が実践している「雑なRSpec」の書き方を紹介します。 備考 この記事は以前自分のブログに書いた内容を加筆・修正したものです。 「雑なRSpec」以外の話
はじめに ひとつ前のエントリでRSpecの話を書いたので、それにちなんで最近僕の身の回りで起きたテストコードに関する雑多なエピソードをいくつか書いてみます。 その1:テストコードを書いてない処理で見事にバグを出してしまった・・・!! 僕はソニックガーデンの中では「テスト番長」の異名を持っていて、基本的にテストコードはしっかり書くタイプです。 ですが、どうしてもリリースを優先しなければいけないときは、やむを得ずテストコードを後回しにして先にリリースすることもあります。 先日リリースした「テストを後回しにしたコード」は、リリース直後は問題なく動いていました。 その数週間後、別の仕様変更が入り、変更したコードをリリースしました。 「テストは全部パスしているので大丈夫なはず~!」と思ったら、リリースの翌日に変なシステムエラーが発生。 エラーが起きている場所を見て、ガーン。 例の「テストを後回しにし
Viibarアドベントカレンダーのトップバッターは @yagince が担当致します。 テスト書くのが当たり前になってきた昨今、フルテストはCIサーバに任せるのが当たり前になっている方も多いのではと思います。 しかし、こんな事ありませんか? CIのキューがめっちゃ溜まってしまう インターネット繋がらない環境にいる時にリモートにpushできない そんな時、ローカルでフルテスト流したい!ってことになりますよね。 はい、私はなりました。 というわけで、今回はローカル環境でフルテスト流すのを頑張るためにやったことを書きます。 ※今回はテスト自体をリファクタリングするのではなくツールや設定を変更する事で改善を試みます 前提 Ruby: 2.2.2 Rails: 4.2.3 MySQL: 5.6.27 OS: Mac OSX 10.10.5 まずはフルテスト流してみる
概要 この記事では、RSpecにあまり馴染みがない人にもわかりやすいように、RSpecの理想的な書き方(=コーディングルール)を説明しようとしています。 書いてあることは個人的な見解です。理性的な議論を歓迎します。 友人に語っているような文体ですのでお気をつけください。 動機 俺はみんなにRSpecを書いてほしかったんじゃない。 いいRSpecを書いてほしかったんだ(´・ω・`) なぜかバリデーションだけ一生懸命にテストされていて自作の30行近いメソッドにテストがないとか、10行近いbeforeブロックがコピペされまくってるとか、そういうのはさ、見たくないんだ。 あと、http://betterspecs.org/ は読もう。日本語版もあるし。そこに書いてあることはここでは繰り返さないので、あしからず。 総論 はじめに ここから先は読まなくてもいいからこれだけは読んでほしい。 itブロック
Photo by Flickr: chief_huddleston's Photostream Railsの規模が大きくなると自動テストの実行時間もだんだんと長くなっていきます。素早く開発していくにはテストの実行時間を短くすることが大切です。 RSpecのテストを速くする方法をまとめましたので参考にしてください。 動作確認 Rails 4.1 rspec-rails 3.1.0 test-queue 0.2.9 目次 1. RSpecのパフォーマンス測定 2. test-queueで並列でテストを実行する 3. rspec-guardを使って更新したファイルを自動的にテストする 4. Springを使ってテストのロード時間を短くする 5. ログレベルを変える 6. GCを実行を抑える 7. RSpecファイルのリファクタリングをする 7.1. itを少なくする 7.2. createよりも
Guardとは Guardとはファイルの変更を検知して、自動的にさまざまな処理を実行してくれるRubyのGemです。 これ単体で使うよりも、他のツールと連携し、自動的に処理を行うことにより開発効率を上げることができます。 メジャーどころとしては、次の3つだと思います。 guard-livereload - Viewファイルの変更したときに自動的にブラウザをリロードする guard-rspec - specファイルを変更したときに自動的にRSpecを実行する guard-rubocop - ファイルを修正したときにRuboCopを実行する 本記事では、Railsへguard-rspecの導入方法を記載します。 RSpecを自動的に実行することで、ソースがいつ壊れたか簡単に検知できるようにします。 対象読者 Railsの開発効率を上げたい方 確認バージョン Mac OSX 10.9 Ruby
前回はRSpecの基本メソッドについてまとめました。今回はMockについてまとめます。 テストダブルとは テスト対象が依存しているモジュールやリソースの代役のこと。結合テストのような複雑な環境を事前に用意せずとも目的の機能をテスト可能となるように振る舞いをシミュレートする。 irb,pry等でMockを試したい時、
はじめに みなさんこんにちは! この記事は「必要最小限の努力で最大限実戦で使える知識を提供するRSpec入門記事」、略して「使えるRSpec入門」の第2回です。 今回はRSpecのマッチャについて説明していきます。 第1回と同様、今回も「最低限これだけは」という内容に絞り込んで説明します。 使用頻度の少ないマイナーなマッチャ(注:僕基準)については説明しません。 具体的な項目は以下の通りです。 マッチャとは何か to / not_to / to_not eq be be_xxx be_truthy / be_falsey change + from / to / by 配列 + include raise_error be_within + of これからRSpecを始める人はもちろん、何度かRSpecに触れて「うーん、RSpecってわけわからん」となっている人もこの記事で再入門してみると
tl;dr 手作業で構築した AWS リソースの管理には以前から気になっていた awspec が良いと思ったのでメモ。 二台、三台のインスタンスなら...とうっかりと手作業で構築したインスタンスや、どんな設定で作ったか判らないけど、なんとなく利用されている S3 Bucket の管理をどうしようかなと思っていたら awspec の generate コマンドがリソース情報を生成してくれるので試してみた。 参考 github.com qiita.com memo インストール $ cat Gemfile source "https://rubygems.org" gem 'awspec' gem 'rake' $ bundle 初期化 $ bundle exec awspec init + spec/ + spec/spec_helper.rb + Rakefile + spec/.giti
An RSpec cheatsheet in the form of a Rails app. Learn how to expertly test Rails apps from a model codebase A small yet comprehensive reference for developers who want to know how to test Rails apps using RSpec. Here you'll find in-depth examples with detailed documentation explaining how to test with RSpec and related testing gems, which you can then apply to your own projects. This application w
Myron Marston » Notable Changes in RSpec 3の雑な訳です。 誤訳・雑すぎる訳がありましたら、Twitterで@nilp_までご連絡頂けると助かります。 RSpec 3.0.0 RC1が2日前にリリースされました、そして最終的な3.0.0のリリースが目前に迫っています。 我々はβ版をここ6ヶ月にわたり使ってきました、我々はそれらを皆さんと共有できることにわくわくしています。 これが新しいとこだよ: すべてのgemたちにわたって Ruby 1.8.6と1.9.1のサポートがなくなりました これらのバージョンのRubyはかなり前に寿命を迎えました、RSpecはこれらをサポートしません。 Ruby 2.xのサポート向上 最近のRSpec 2.xのリリース(すなわち2.0がリリースされたあと出たやつ)はRuby 2を公式にサポートしています、しかしRSpec
Ruby on Rails Tutorialのエッセンスを自分なりに整理してみる7 Railsにおけるリンクの記述方法とそのテスト http://qiita.com/kidachi_/items/d704e7eb63513c3831ae の続き。 Ruby on Rails Tutorial(chapter5) http://railstutorial.jp/chapters/filling-in-the-layout#sec-layout_exercises ##Rspecのリファクタリング 指定のページが指定の要素を持っている(もしくはいない)かをチェックするテストコード。 require 'spec_helper' describe "Static pages" do describe "Home page" do it "should have the h1 'Sample App
はじめに リーダブルRspecというタイトルつけましたが、そんな大それたものではないです テスト書くときでも名前付け重要だからちゃんとしよう!っていうだけの内容です RspecがBDDのためのツールであることを意識しつつ、 Rspecの流儀に則って適切に名前付けをして書くと読みやすいテストがかけるはずです describe/context/exampleのメッセージに適切に名前つける これが出来るだけで当然読みやすいテストになる describe->テスト対象 context->テストする状況 example->テスト(itやspecify) なので、 『aaaはbbbの時cccになる』 というテストを書くときは次のようになる 重要なのは describe/context/exampleだけでテストの概要を説明すること 理解しやすい状態になっていないと、負債になってしまう 1つのdescr
FactoryGirlでテストデータを定義する時に、transientとtraitを活用すると色々捗るという話。 transientは実際に作成するデータと直接関係無い新しいattributeを定義する機能。 そこで定義されたものは実際のmodelにはセットされないしattributes_forでも出力されません。 何のために使うかというと作成時に挙動を変更するためのフラグや追加データとして利用するのが一般的です。 traitは属性の定義を一纏めにして名前を付けられる機能です。 parentを指定したfactoryの継承とは違い、traitは単体ではfactoryとして機能しません。 あるfactoryの特定の状態に名前を付けて、付け外しできるようにする、というのが主な使い方になります。 例えば、あるfactoryをある時はadminある時は非adminで作りたい時等に有効です。 個人的に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く