コード日進月歩

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

RSpec

RailsでRSpecを使う際にテストデータ用のファイルを置く場合はspec/fixtures/file配下が良さそう

CSVアップロード機能のテストなどをするときにテストデータを置きたいときのメモ 出典元 file fixture - RSpec Rails - RSpec - Relish ドキュメントいわく Rails 5 adds simple access to sample files called file fixtures.File fixtures are normal file…

RSpec3でbe_trueとbe_falseはなくなり、be_truthyとbe_falsey(be_falsy)になった

変化の経緯がなるほどなーと思ったのでまとめる。 出典 Notable Changes in RSpec 3 解説 RSpec3のリリースノートいわく RSpec 2 had a pair of matchers (be_true and be_false) that mirror Ruby's conditional semantics: be_true would pass for any val…

RSpec(rspec-rails)のrails_helperの初期設定は「RAILS_ENVがなければtestにする」という設定なので気をつける

RAILS_ENVを意図的に設定しているとRSpecが動かない場面に遭遇するので気をつける、というメモ。 環境 rspec-rails (3.8.1) 該当記述 rails g rspec:install で生成されるファイルのテンプレートは以下のような記述になっている ENV['RAILS_ENV'] ||= 'test'…

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…

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にて対象のクラスを明示的にちゃんと書いている場合はdescribed_classを使うと便利

あ、こんな書き方あるんだという感じのメモ。 環境 rspec (3.7.0) 書き方 RSpec.describe User do let(:u) {described_class.new} end と書くと RSpec.describe User do let(:u) {User.new} end と同義になる 参考リンク 【RSpec】described_classの小さなサ…

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…

Request spec において、リクエストされたURLのホスト名をテストの内容に含めたい場合

アクセスしてきたURLのホスト名がexample.co.jpのときとexample.comのときで振る舞いが変わる みたいなControllerへのRSepcをかくときのかき分け方 環境 rails (5.2.0) rspec (3.7.0) やり方 普通にheadersで指定するハッシュに { "Host" => "example.co.jp"…

想定したキーがすべてあるかを確かめるRSpecの書き方

あくまでも私はこうしているよシリーズ。 let(:keys){ "id" , "updatedAt", "createdAt" } it "マッチするか" do # 何かしらチェックしたいhashを降り出す hash = subject # Array化したキーとチェック対象がマッチしていればある expect(hash.keys).to matc…

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…