有頂天Rubyスマートフォン用の表示で見る有頂天Rubyビールを飲みながらRubyについて書きます。この広告は、90日以上更新していないブログに表示しています。誤訳・雑すぎる訳がありましたら、Twitterで@nilp_までご連絡頂けると助かります。RC1が2日前にリリースされました、そして最終的な3.0.0のリリースが目前に迫っています。我々はβ版をここ6ヶ月にわたり使ってきました、我々はそれらを皆さんと共有できることにわくわくしています。1.8.6と1.9.1のサポートがなくなりましたこれらのバージョンのRubyはかなり前に寿命を迎えました、RSpecはこれらをサポートしません。3でのサポートはより向上しました。2の新機能のためのサポートを提供しています、たとえばキーワード引数やprependされたモジュールなどです。rspec-supportrspec-supportは、我々が1つ以上のrspec-(core|expectations|mocks|rails)で必要としている共通したコードのために使用している新しいgemです。それは今のところエンドユーザーあるいは拡張ライブラリの作者が使えるようなpublicなAPIは含まれていません、しかし我々は将来いくつかのAPIをpublicにするかもしれません。あなたがGemfileでGitHubをソースに指定して、最新版RSpecを実行しているなら、あなたはrspec-supportのために同じ指定をする必要があります。warningに相当します。βの間、我々はアップグレードが出来る限りスムーズに進むよう多くのアップグレードを行いました。我々は段階的にアップグレードするための説明を1つにまとめてあります。それは重複したdeprecationの出力を少なくするように設計されています。改善されたドキュメント我々は全てのgemのAPIドキュメントをアップデートするためクソ頑張りました。それらは現在rubydoc.infoでホストされています:rspec-corerspec-expectationsrspec-mocksrspec-rails...しかし、現在われわれはこれらをセルフホストするために、rspec.infoの更新を行っています。我々はSemVerの一環として全てのパブリックAPIを明確に公表できるようにしました。我々は全ての3.xのリリースの間、全てのパブリックAPIをメンテナンスするために全身全霊を尽くしています。一方で、プライベートAPIについては、3.xのリリース中のどこかでそれらを変更できるような柔軟性を確保したかったのでプライベートとなっています。我々がプライベートと宣言したAPIを使わないでください。APIによって取り上げられていないニーズを見つけたら、どうぞ尋ねてください。我々はなたのニーズのため喜んでプライベートAPIをpublicにするか、新しくあなたのユースケースに合ったAPIをつくるでしょう。Gemに署名がついたなう我々は私達のgemに署名をつけはじめました。我々は私達の公開鍵をGitHubに置いています。Gemsを見てください。ゼロモンキーパッチモードRSpecは今いかなるモンキーパッチもなしで使うことができます。このための大部分の土台が新しくexpectベースの記法をrspec-expectationsとrspec-mocksに追加した最近の2.xのリリースで作られました。3への道のりで、残りの部分をとりのぞき、残っているモンキーパッチについても代替を提供しました。}endこのcontextでは:allという言葉はテストスイート中の全てのexampleの前に一度のみ実行されることを推測してしまいます、しかしそは:suiteのことです。:exampleは:eachのエイリアスで:contextは:allのエイリアスです。:eachと:allはdeperecatedではなく我々がそうする計画もないことに注意してください。その説明、場所、メタデータ、実行結果、などなど。3では、我々はexampleメソッドを取り除きました。その変わりに、instanceは全てのexampleスコープのDSLメソッドにはっきりと引数として渡されるようになりました。2.xはトップレベルメソッドのdescribeや、shared_examples_forやshared_contextを提供するためmainとModuleをモンキーパッチしていました。3では、これらのメソッドはRSpecモジュール上で利用出来るようになりました(それに加えてモンキーパッチとしても利用可能です)。endend新しいexpose_dsl_globallyの設定オプションをfalseに設定することによって、あなたはrspec-coreのモンキーパッチを完全に取り除くことができます(それにより上で出てきた最初のexampleはNoMethodErrorの例外を投げるようになります)。2.xでは、我々はあなたがメタデータ付きのexampleのエイリアスを定義できるAPIを提供しました。groupのエイリアスを定義するためのAPIを加えるだけではなく、我々は同様にいくつかの追加のビルトインエイリアスを加えました(describeとcontext上に):xdescribe/xcontext、たとえばxitのようなものです、一時的に1つのexampleグループをスキップするために使えます。:focusによって関心を持ったexamplesとgroupsを簡単にフィルターできます。exampleは今、ほんとは通っているのかをチェックするために実行されます。それが成功した場合、それは失敗したことになります。これはexampleらを保留にしたことと、それらが説明していることが実装されたとき保留を迅速に解決することを確実にする手助けをします。"決して実行しない"古い動作をサポートするために、skipメソッドとメタデータが加えられました。endendこの変更によって、あるexample中でpendingにブロックをわたすことは納得いかない動作になりました、なのでその動作は取り除かれました。}endこのcontextでは、shouldはモンキーパッチされていませんがshouldは:expect記法のみをサポートするrspec-expectationsの設定によって取り除くことが出来ます。この場合はshouldを使えるようにObjectをモンキーパッチするのに嫌な気はしません、これはあなたの記法の設定にかかわらず常に利用可能です。何名かのユーザーはもしこれを使い続けることが出来るなら、このshouldとexpect記法をどう関連づけるのかについて戸惑いをみせました。}endis_expectedはexpect(subject)として非常に簡単に定義されており、should_notと同様に否定する検証をis_expected.not_toマッチャーによりサポートします。2.8からrandomな実行順をRSpecに取り入れました、これはあなたのspecスイート中にある故意ではない実行順依存を明らかにするのに非常に役に立つでしょう。3では、単にオールオアナッシングの機能ではなくなりました。あなたはexampleグループごとに合ったメタデータでタグ付けし、個別に実行順序をコントロールすることができます。このグループ中のexampleらは常に定義された順序で実行されます。このグループ中のexampleらは常にランダムな順序で実行されます。あなたは問題を一度にすべて解決しようとせず、特定のグループに対してこの機能を用いていくことで、実行順序の依存を1つずつ解決していくことが可能です。非常に多岐に渡る意味を持つと実感したからです。3では、我々はオーダーリングストラテジーAPIをオーバーホールしました。register_orderingです。オーダーリングストラテジーに名前をつけるためにこれを使ってください。groupsを順番付けるために使われます。--initのカイゼンrspecコマンドは長い間、プロジェクトスケルトンをセットアップするために--initオプションを提供してきました。3では、そのコマンドが作成するファイルが、箱から出してそのまま使えるよりよいものを提供するため、かなりカイゼンされました、そして推奨する設定と一緒にspec/spec_helper.rbファイルを提供します。ファイルを開いて、あなたがいいな〜と思うオススメ設定を受け入れるといいですよ。--dry-runこのオプションはいかなるexampleもhookも実行せず、あなたのspecスイートをformatterを使って出力した結果を画面に表示します。これは、テストが通る/落ちるを気にしたり、テストが実行されるのをまったりせずに、あなたのテストスイートのドキュメント化されたアウトプットをレビューするのに特に役にたちます。discussionフォーマッターのAPIが変わりましたより柔軟な完全に新しいフォーマッターAPIが追加されました。gemが提供されます。:rspecendさて、この:stdlib周りで混乱がありました。1.8では、標準のアサーションモジュールはTest::Unit::Assersionsです。1.9+では、それはMinitesst::Assertions上の薄いラッパーです(あなたが単にそれだけを使うならうまくいきます)。gemも同様にTest::Unit::Assertionsを定義しました。詳しい情報:Documentation〜由来のメタデータ定義RSpecのメタデータシステムは超絶に柔軟で、あなたはテストスイートをいろんな切り口で扱うことができます。この新しい設定APIは、あなたが〜由来のメタデータを定義することを可能にします。bundleに移動しました。1つのテキストエディタのためのフォーマッターをrspec-coreの中に持つのは筋が通りません。RCovとの統合はなくなりました。これが1.9+で動くようにアップデートされることはありませんでした、最近では我々は代わりにsimplecovを使うことをおすすめしてます。コマンドラインオプションの--debugをとりのぞきました。最近では非常におおくのデバッガーの選択肢があります、そしてあなたはそれらをコマンドラインから--require(あるいは-r)オプションを使って有効にできます。byebugを使うには、-rbyebugをコマンドラインで渡します。我々はコマンドラインオプションの--line-numberをとりのぞきました。43はロードされた全てのspecファイルの43行目の近くで定義されたexampleを選択するが、それぞれのファイルの43行目が関係ある理由がない)、よりぶっきらぼうな感じのpath/to/spec.rb:43の形と重複しています。Alfvinがメンテナンスすることを申し出てくれました。だれかボランティアはいませんか?)。2.11で我々は新しいexpectベースの記法を導入することで、モンキーパッチをRSpecから外す方向に進みはじめました。warningを受けとるでしょう。我々にはそれを無くしてしまう計画はありません。eq("yellow")それらは&と|演算子にエイリアスされています。3は、マッチャーを引数として他のマッチャーに渡すことで、あなたの意思を詳細に表現することを可能にします。)コードの表現と失敗時のメッセージの可読性を向上させるため、ほとんどのマッチャーは、それらの式が引数として渡されたとき、きちんと読めるようなエイリアスをもっています。3では、それは任意のネストした配列/ハッシュのデータ構造のマッチングを追加でサポートします。コンポーザブルマッチャー)新しいallマッチャーこのマッチャーをつかえば、あなたはコレクションの中の全ての要素の何かがtrueであることを記述出来るようになります。Farhiより詳しい情報:Documentation新しいoutputマッチャーこのマッチャーをつかうと、そのブロックがstdoutもしくはstderrに書く内容を記述できるようになります。2は動的な述語サポートを使い、between?を実装してるオブジェクトに対してbe_betweenマッチャーを提供してきました。>=)それはinclusiveとexclusive2つのモードを提供します。be_trueはnilかfalse以外の全ての値で通ります、そしてbe_falseはnilかfalseの場合通ります。falseとの混乱をなくしました(be_true/be_falseと同じように読めるが、ほんとにtrue/falseのときしか通らない)。discussionmatch_arrayマッチャーがcontain_exactlyとして利用できるようになったRSpecは長い間、このマッチャーをあなたが2つの配列の内容を順番を気にせずに比較することに使えるようにしてきました。"match"は不明確な言葉遣いです、このマッチャーは配列以外の種類のコレクションでもうごくことを意図しています。3)気をつけて欲しいのはmatch_arrayはdeperecatedではないことです。*splatどう訳すか)こと以外は、この2つのメソッドはまったく同じです。gemに切りだされましたコレクション数マッチャー―have(x).items、have_at_least(y).itemsそれにhave_at_most(z).items―はRSpecの魔法じみて混乱するパーツの1つでした。Baraúnaがメンテナンスするのに名乗りをあげてくれました。2.xでは、rspec-expectationsは自動的に自身をMiniTest::Unit::TestCaseかTest::Unit::TestCaseにincludeしました、なのであなたは単にMinitestやTest::Unitをロードするだけでrspec-expectationsを使うことができました。4(あるいはそれ以下)とTest::Unitとの統合が自動的に行われなくなりました。あなたがrspec-expectationsをそのような環境で使うなら、あなたはRSpec::Matchersをあなた自身でインクルードする必要があります。3では、我々はshouldをrspec-expectationsのメインの記法にすることをやめました。(カスタムマッチャDSLのmatchエイリアス)には変わりのものは用意されず、とりのぞかれました(単にmatchを使ってください)カスタムマッチャDSLのmatch_for_should_notはいまmatch_when_negatedそれに加え、我々はsupports_block_expectations?を新しく追加しました、マッチャープロトコルのオプション部分です。これはもしユーザーがvalueマッチャをブロックexpectation式中で間違ってつかったときに分かりやすいエラーを与えます。be_nil気をつけてほしいのは、supports_block_expectations?はマッチャープロトコルのオプションの部分だということです。ブロックexpectation式で使ってほしくないマッチャのために、あえてこれを定義する必要はありません。ゼロモンキーパッチのシンタックスへ向けて進みはじめました。warningを出すようになりました(rspec-expectationの新しい記法と同様です)。Phippenreceive_messagesとreceive_message_chainのための新しい記法もともとのモンキーパッチの記法には2.14でリリースされた新しい記法にはかけていた機能がいくつかありました。receive_messagesとreceive_message_chainです。:bazz).and_return(3)これらの新しいAPIの利点の1つがこれらはexpectと組み合わせても、同じように動くことです、一方で古い記法のstub(hash)やstub_chainではこれと同じことはできません。mock、stubとdouble。doubleみたいな、下の方をみてください)。changedoubleらを検証するあなたが実際に存在するメソッドのみをstubあるいはモックしていることを保証するため、新しい種類のdoubleが追加されました、それは渡された引数を宣言されたメソッドシグネチャによって確認します。instance_doubleとclass_double、そしてobject_doubleのdoubleらは、これらの条件が満たされない時すべてにおいて例外を投げます。クラスがロードされていないとき(通常はユニットテストを独立して実行している際)、例外が発生することはありません。これは複雑な動作です、しかし独立したユニットテストの速度を高め、インテグレーションテスト(あるいは型システム)に近づくにつれ信頼でき、非常に強力です。これは大変奇妙な動作に見えるかもしれませんが、独立したユニットテストに速度と、インテグレーションテスト(あるいは型システム)に近い信頼性を与えます。これらの新しくよりパワフルなdouble型を使うべきではない理由はあまりないでしょう。usesDocumentation部分的なdoubleの検証の設定オプションdoubleらを検証する動作は部分的なdoubleにおいてはグローバルに有効になっています。endend我々はあなたがこの設定を全ての新しいコードで有効にすることを推奨しています。スコープが変わりましたrspec-mocksのオペレーションは、テストごとのライフサイクルを念頭に設計されました。ユーザーがrspec-mocksの機能をテストごとのライフサイクルの外から使おうと試みたときについてのバグレポートを受け取りました。exampleが存在しない他のどのcontext)から使う使い方はサポートされません。テストダブルは1つのexampleにしか使えなくなりました。うっかりそれをクラスアトリビュートに代入して、それ以降のexampleでそれを使った場合)、あなたはエラーをうけとるでしょう。implementationany_instanceのインプリメンテーションブロックがレシーバを渡すメソッドスタブにインプリメンテーションブロックを提供することは、オブジェクトの状態に寄るような計算を行うのに役にたつでしょう。2でany_instanceを使うとき、残念ながらシンプルにこれを行う方法はありませんでした。discussionrpsec-railsファイルタイプに基づく推測がデフォルトで無効になりましたrspec-railsはspecファイルのファイルシステム上の場所にもとづき自動的にspecにメタデータを追加します。これは新規ユーザーに混乱をもたらします、そしてこれを好まないベテランのユーザーもいます。config.infer_spec_type_from_file_location!end流行しているチュートリアルではこの動作を前提にしているため、デフォルトで生成される設定ファイルはこれを有効にしたままです。specsのためのドキュメントなど。gemに切りだされました。webratのサポートがなくなりましたWebratのサポートがとりのぞかれました。変わりにcapybaraを使ってください。匿名controllerのカイゼンrspec-railsは長い間、あなたにテスト用の匿名のコントローラを作ることを可能にしてきました。3では、それらはいくつかのカイゼンを施されました:デフォルトで、匿名コントローラはApplicationControllerを継承せず、説明している対象のクラスを継承するようになりました。この動作はinfer_base_class_for_anonymous_controllersの設定オプションで無効にすることが出来ます。標準的ではないコンテキストでそれを使ったときについて多くのバグフィックスが行われました、たとえば抽象的な親やApplicationControllerを継承しなかった場合など。あなたが過去に匿名コントローラ絡みの問題を経験しているなら、今が再度それを使ってみるいい機会です。3は、ここ4年ではじめてのメジャーリリースです。この大仕事は大勢のコントリビュータによって成されました。あなたがRSpecをどう使おうとも、我々はあなたが新しい変更を我々以上に気に入ってくれることを願っています。»プロフィールid:nilpビールを飲みながらRubyについて書きます。installを爆速で処理するさくらVPSを借りた月別アーカイブはてなブログをはじめよう!nilpさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。