RSpec では subject と is_expected を利用して次のようにテストを書くことが出来ます。 context "test" do subject { 42 } # is_expected の内部で subject が呼び出される it { is_expected.to eq(42) } end raise_error を使いたかった 次のように raise が発生する場合は is_expected を利用することが出来ません。 context "test" do subject { raise RuntimeError } it { is_expected.to raise_error(RuntimeError) } end これは is_expected が内部で expect(subject) という風に呼び出されるためです。 raise_error をテストするため
はじめに 先日、MinitestとRSpecを比較するこんな記事を書きました。 blog.jnito.com MinitestとRSpecの比較記事はネットにたくさんありますが、その中の一つにRSpecのメイン開発者であるMyron Marston氏によって書かれた記事(回答)がStackoverflowに載っています。 ruby on rails - Minitest and Rspec - Stack Overflow 2012年9月の回答なので現在では状況が変わっている点も多少あるかもしれませんが、なかなか興味深い内容だったので翻訳してみました。 質問:MinitestとRSpecについて ついさっきMinitestを解説しているRailscastを視聴しました。 Railsアプリケーションをテストする場合、RSpecとMinitestではどのような長所と短所がありますか? RSpe
実際にはほとんど3.3の話ですが、まぁ3.3それだけよさそうなんで、みなさん使ってみてください。 まずはRSpecのブログにも書いてあったものから。 RSpec 3.1 has been released! RSpec 3.2 has been released! RSpec 3.3 has been released! (3.2での変更) Core: Performance Improvements オブジェクトを割り当てる回数を減らして速くしたそうです。RSpecが速すぎて困る人は誰もいません。上げましょう。 (3.2での変更) Mocks: Mismatched Args Are Now Diffed expect(x).to eq(y) して失敗した時と同じように、expect(x).to receive(:method_name).with(arg)と書いて失敗した時も予測した結
(2022.5.4追記) FactoryGirlはFactoryBotという名前に変更されています(参考)。この記事は昔の名前である「FactoryGirl」を使っています。 はじめに 今年のゴールデンウイークはMinitestとRSpec、FixturesとFactoryGirlについていろいろ研究(?)していました。 具体的にはこんなことをやっていました。 Rails Tutorial 第3版を写経した(第3版ではMinitestとFixturesを使っている) Rails TutorialのテストコードをRSpecとFactoryGirlで書き直した Everyday RailsのテストコードをRSpec + FactoryGirlからMinitest + Fixturesに書き直した The Minitest Cookbookを読んだ 今回のエントリではMinitestとRSpec
技術部アルバイトの鈴木(@draftcode)です。 クックパッドが内部向けに開発・運用を行ってきた、分散テスト実行システムRRRSpecをオープンソースとして公開しました。RRRSpecは時間のかかる自動テストを分散処理することで、全体のテスト時間の短縮を狙うアプリケーションです。現在クックパッドでは17000を超えるテスト項目があり、マシン一台でテストを実行すると完了まで数時間かかります。このテストを60並列程度の分散処理で行うことで、平均8分から9分程度で完了できるようになりました。また、Amazon EC2のスポットインスタンスを利用することにより、大幅なコスト削減も同時に達成しました。 https://github.com/cookpad/rrrspec 分散テスト実行とは アプリケーションが大きくなるにつれて、自動テストの数も大きくなっていきます。クックパッドでは、非常に多くの
はじめに 以前から何度か紹介しているRSpec本の翻訳が終了し、ついに販売を開始しました! 提供フォーマットはMOBI(Kindle)、EPUB(iBooks)、PDFで、下記のページから購入できます。 Everyday Rails - RSpecによるRailsテスト入門 - Leanpub 今回は改めてこの本の紹介を書いてみようと思います。 「Everyday Rails - RSpecによるRailsテスト入門」ってどんな本? 「Everyday Rails - RSpecによるRailsテスト入門 ~テスト駆動開発の習得に向けた実践的アプローチ~」はタイトルの通り、RSpecを使ったRailsの自動テストを説明した技術書です。 内容としては比較的易しめで、そこまで高度な話題は出てきません。なのでRSpecの未経験者~中級者かつ、Railsを使って開発している技術者がターゲット層にな
この記事はRuby Advent Calendar 2013の6日目の記事です。 昨日はShindo200さんのRuby で paiza.jp のオンラインハッカソン問題に挑戦するときに少し役に立ちそうなことでした。 概要 Rubyのデファクトスタンダードなテストフレームワークと言えるRSpecですが、現在バージョン3.0のリリースへ向けて開発が進められており、先日2013年11月8日には3.0.0.beta1がリリースされました。 この記事ではRSpec 3における変更点と、RSpec 3へのアップグレード手順、また既存のspecを最新の記法に変換するツールを紹介します。 追記 RSpec 3は2014年6月2日に正式リリースされました。この記事は2013年12月6日に書かれたものですが、正式版においても通用する内容になっています。 正式版における主要な変更点は、以下のページが参考になる
というように書くようになりました。 別にshouldを使った記法がなくなったわけではありませんが、 https://github.com/rspec/rspec-expectations のREADME.mdには、もう新しいSyntaxの説明しか載っていないし、今後はexpectの方を使っていくほうがいいでしょう。 http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax には、新しいSyntaxを導入した背景が説明されています。 簡潔に書くと、shouldだとBasicObjectを継承したクラスのテストを書くときに不具合が起こるみたいですね。 移行方法 基本 基本的には、上に書いたように、 foo.should を expect(foo).to に foo.should_not を expect(foo).
先日 モックとスタブ - 日々此妄想 の悩み File.foreachみたいなブロック付きメソッドのスタブってどうやって書くのかなぁ。。。。 Young risk taker.: [RSpec] Mock API を見ていて、たぶん and_yield だというところまでは目をつけていた。 yield わかってるつもりだったけど、ちょっと甘かったっぽい。 def foo yield(1,2) end foo {|a,b| p [a, b] } # => [1, 2] (要するに p [1, 2] を実行した) これは理解できてたんですよ。はい。 じゃー Array#each みたいなのはどうするのか理解できてなかったっぽい。*1 で、and_yieldを知るには、まずyieldだと思ってRubyのリファレンスを見ました。すると目から def bar yield 10 yield 20 yi
Mock Object Mock Objectの作成 my_mock = mock(<name>) my_mock = mock(<name>, <options>) person = mock('person', :null_object => true) Mockは名前を引数に取る。仕様の検証が終わった際に全てのMockが検証される。 option引数をハッシュで与えることでMockの振る舞いを調整できる。現在、:null_objectのみがサポートされている。:null_object => trueを引数に渡すとMockに対する全てのメソッドがMock自身を返すようになる。 Mockに対してスタブメソッドを定義する person.should_receive(:name) # person.name => nil person.should_not_receive(:name) #
Cucumberって、仕様設計者の意図をプログラムによる自動テストにできる魔法です。 仕様設計者っていうのは、Rubyでのプログラミングが難しいけど、お客さまのニーズを理解して、それをドキュメントにできるハイパーな人です。プログラマにとっては神様です。 (でも、それがプログラマの徹夜の源なのだったりしますよね。実現が困難で意図が不明な仕様を必死で実装する感じですよね。だから、それをなんとかしなければ徹夜は解消できないと考えてみました。) Cucumberではプログラマ以外の人でも分かりやすい記述ができます。 でもね、どうせそのドキュメントを見るのはプログラマだけです。なので、生のCapybara APIで十分なのかもしれませんね。なので、ここではRSpecのfeature specを考察します。 from Feature spec on Relick : https://www.relis
追記 ここに書いてあることを実現する serverspec という gem をつくりました。詳しくはこちらのエントリで。 Puppet マニフェストをリファクタリングするからテスト書くぞ、ってことで、 puppet-lxc-test-box に書いたように、テストするためのシステムコンテナを簡単に作る仕組みをつくったので、今度は実際にテストコードを書くためのベースをつくってみた。 rspec-lxc-test-box こんな感じでテストが書ける。 require 'container_spec_helper' describe 'nrpe' do it { should be_installed } it { should be_enabled } it { should be_running } end describe 'nagios-plugins-all' do it { shou
Puppet や Chef で構築したサーバを RSpec でテストする で書いた仕組みを使いやすくするために serverspec という名前で gem 化してみた。 rubygems.org にも登録してあるので、gem install でインストールできる。 $ gem install serverspec インストールしたら、適当なディレクトリで serverspec-init を実行。すると、雛形となるディレクトリやファイルを生成する。 $ serverspec-init + spec/ + spec/www.example.jp/ + spec/www.example.jp/httpd_spec.rb + spec/spec_helper.rb + Rakefile spec/www.example.jp/httpd_spec.rb がサンプルテストコードで、こんな感じになって
あんまり需要なさそうなのでメインブログから引っ越し。mockについて。 14.1 Test Doubles Test Doubleは他のオブジェクトの代わりをするオブジェクト Spec::Mocks double("double") stub("stub") mock("mock") これらのメソッドは全部同じで Spec::Mocks::Mock クラスのインスタンスを作成する。引数の文字列は option 扱いだけれど、 failure message の中で使われるので入れておいた方がいい。 14.2 Method Stubs Method Stub はあらかじめ決めておいたresponseを返すメソッドのこと。 describe Statement do it "uses the customer's name in the header" do customer = double
What I’ve found A few minutes ago, I was watching a great screencast of Corey Haines doing a kata. I stopped when he was refactoring a few similar assigments. There was something I’ve never seen elsewhere, particularly in the also great RSpec book ; he used the let() method. Going back and forth a few times, I understood the the method was assigning the result of the given block to an object named
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く