コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RSpec

RSpec3の配列系マッチャを利用シーン別に逆引き表を作ってみた

RSpec3から結構選択肢があるようなので一覧表にしてみる 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails…

RailsでのRSpec実行時乱数の状態を実行毎に変わらないように固定する

RSpecでsampleするとコケるんだけど特定しづらい…みたいな奴を解消する。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails --version Rails 5.2.2 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - r…

『テストコード未経験者が RailsでそれなりにRSpecがかけるようになるまでの話』という内容で登壇してきました。

銀座Rails#6 @リンクアンドモチベーション で話してきたメモです。 当日のスライド speakerdeck.com 伝えたかったこと 1人で果敢にRspec書く時にどうしていったかという事例 結構自分でぐるぐる迷うのも経験値として必要なんだけど、あんまり本質的でないさ…

RSpecのletは遅延評価なので2つ書いた場合は最も近いブロックの値を評価する

『遅延評価』を謳っているが、重複表記の場合はどうなるのというメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 例 Userモデルを使うとこんな…

RSpecのbeforeでパラメータ未指定した場合はbefore(:each) / before(:example)と同義

rspecのbeforeフックのところに説明がないのでメモ。 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 動き 未指定の場合は each と同じ挙動をする …

RSpecのbeforeとafterのパラメータ、each/allはexample/contextのエイリアス

あ、そうなの?っていう感じだったのでさらりなメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 出典 Note: the :example and :context scopes …

RSpecのbefore/afterのパラメータをざっと表で書き表す

パターンに関して把握してなかったのでメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 説明 書き方 挙動 他の指定の実行順番 before(:suite) r…

RSpecのExampleとExampleGroupの仲間を軽くまとめる

説明書いていてもわからなくなるのでまとめる 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 まとめ Exampleの仲間 RSpecにおいて、Exampleという…

RSpecのbeforeでインスタンス変数を使いたくなったら、letを使うことを考えたほうがよさそう

letを使ったほうがいいはあるが、インスタンス変数を使うデメリットに関してはあんまりないので書いてみる。 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-suppo…

RSpecでRailsのroute.rbに書いたredirectを検証する

書き方よくわからんと思ったのでメモ 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 やり方 request specで expect(response).to redirect_…

RSpecには表示の出力をキレイにする --format documentation というオプションがある

キレイだが物量すげぇというので一長一短なやつ。 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 やり方 実行時に以下の感じで指定する bun…

RubyのWebMockにて純粋にAPIコールしたかを見たいときは a_request を使うと簡便

結果が知りたいんじゃない、とりあえずリクエストを飛ばしたかを知りたいんだ。みたいなときに使えるやつ 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-s…

RSpec内でcontrollerを定義して、concernのメソッドをテストする

俗に言うAnonymousControllerという手法です。 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 書き方 下記のようなconcernがあったとする m…

RailsでRSpecの実行時引数を.rspecに書いてRSpecの実行を便利にする

require忘れて時間を取られるみたいなことが多々あるので、.rspecを活用するときのメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 使い方 設置…

RSpecのitはブロックにしないことにより、箇条書きリストとして使うことができる

先日のt_wadaさんのライブコーディングで得た知見 環境 rspec (3.7.0) 概要 itはブロックを設けないことにより、pendingになるので、箇条書きとして機能する 例 例えば以下のようなUserモデルがあったとき # == Schema Information # # Table name: users # …

RSpecのdescribeにメソッド名を記述する場合、クラスメソッドは .か:: 、インスタンスメソッドは # で始めるのが一般的

そういやこれの出典どこやみたいな気持ちで探してみたメモ 出典元 Better Specsに書いてあった。 原文:Better Specs { rspec guidelines with ruby } 日本語版:Better Specs { rspec guidelines with ruby } use the Ruby documentation convention of . (…

RSpec内にてRails.envによって振る舞いの変わるものをテストしたい場合の書き方

ただのモックの書き方だが具体例を添えて。 環境 rails (5.2.0) rspec (3.7.0) やり方 allowとand_returnを使う allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production")) 原理 allow({{クラス名}}).to receive({{メソッ…

RSpecのsubjectは同一ブロック内で2回指定しても再実行されるわけではない

2回実行した時…みたいので subjectを2回実行すればいいやん! みたいに思うがそうは問屋が…的な。原理までは調べてないが挙動としてはこうなんだよメモ 環境 $ bundle exec rspec --version RSpec 3.7 - rspec-core 3.7.1 - rspec-expectations 3.7.0 - rspe…

RSpecでテストをpendingしたい場合はxから始まるメソッドにリネームするといい

こんな機能があるんだという気持ちになったのでメモ 環境 rspec (3.7.0) 使いかた example_spec.rb として以下のスペックを書いてみる 実行すれば以下の結果 require "rspec" describe "DummyTest" do describe "Target" do context "Case1" do it "SuccessA…

RailsでTimecopを使わず現在時間をずらすRSpecを書く

実はTimecopはいらなくなったという話題の実践編 環境 rails (5.1.5) rspec (3.7.0) やり方 helperに追記 rails_helper.rbのお好みのところに追加 RSpec.configure do |config| # 中略 config.include ActiveSupport::Testing::TimeHelpers end 使い方 trave…