のシリーズの続きのつもりです。
環境
rbenv versions system 2.5.0 * 2.5.1
gemでbundler
のみインストール済み
基礎
「とりあえず写経/コピペするだけだし'test'ってフォルダ/ファイル/class/メソッド名でいいや。そういうのgithubでよく見るし」
常にこの姿勢であったが、駄目っぽい。そもそもtestって 「なんか調べてたら使えそうなやつあったから手元で動かしてみるか」 程度の意味だと思っていた。
TDD?
名前くらいは聞いたことあるし言及している記事も読んだことがあるが、開発の経験がないし、生活のなかで適当にその場限りのプログラムを書き捨てるだけの人間なので、テストという頻出単語がいったいなんなのか分からん。
要するに、今回の試みで導入した感じで、先にテストコードを書いてから、そのような結果になるように実際のロジックを実装する、という感じ(だと思う多分)。
rubyだとMinitestなどが該当する。
BDD?
Behavior Driven Development. TDDがテストを視座にした概念で、BDDは振る舞いを視座にした概念。
TDDの文法は「こういう入力に対してのこういう出力」みたいな感じで、BDDではこれが「このメソッドにこうすると、こういう結果を期待する」みたいな感じ。意味は同じように感じるが、要求仕様を説明(テスティングフレームワークではdescribe文とかが使われることが多いようだ)している点が(たぶん)違い。Minitestの例をみると、テストメソッド名が長々と説明的になっているものをみかけるが、RSpecの流儀に従えばそのようなことはなくなる。英語的にちゃんと意味が通るように書いてみればよい。
RubyだとRspecとかが該当する。
spec?
テストフレームワークワークという文言に思考が引っ張られるけど、 Specification(仕様) のことらしい。
プロジェクトフォルダ作成
適当な場所に。
$ tree . └── lib └── fizz_buzz.rb
bundlerでRSpecをインストール
bundle init
したらGemfile
が出来るのでrspecを入れるように指定
# frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "rspec"
bundle install --path vendor/bundle
パスは指定してやらないとグローバルにインストールされるので注意
ちなみにここでGemfile.lock
が作成される
以降はexecをつけて実行
bundle経由でやるので。
rspecの初期化
bundle exec rspec --init
するとspec
フォルダと.rspec
ファイルが作成される。
spec
フォルダにはspec_helper.rb
が作成されている。.rspec
とあわせてどう使うのはわからん。
とりあえずこのフォルダにターゲットのファイルの名前_spec.rb
という感じでテストコードを書いていく。
テストコードを書く
fizz_buzz_spec.rb
として、
# require './lib/fizz_buzz' require 'fizz_buzz' # この書き方でも自動でlib/fizz_buzzを参照してくれる RSpec.describe 'Fizz_Buzz' do example 'fizz_buzz' do expect(fizz_buzz(1)).to eq '1' expect(fizz_buzz(2)).to eq '2' expect(fizz_buzz(3)).to eq 'Fizz' expect(fizz_buzz(4)).to eq '4' expect(fizz_buzz(5)).to eq 'Buzz' expect(fizz_buzz(6)).to eq 'Fizz' expect(fizz_buzz(15)).to eq 'FizzBuzz' expect(fizz_buzz(18)).to eq 'Fizz' expect(fizz_buzz(19)).to eq '19' expect(fizz_buzz(20)).to eq 'Buzz' expect(fizz_buzz(30)).to eq 'FizzBuzz' end end
としてみた。
テストしてみる
なんどもいうが、今回はbundle経由なので。
bundle exec rspec
よくできました。
参考
Railsでデフォルトで使われるからか、Railsを扱った例が多く見つかる。純粋にRSpecだけをやるやつがほしいのに。。
久しぶりにbundler使ったけどおさらいがてらこれでおk bundlerでgemをプロジェクトごとに管理する
railsが絡んでこないrspecの記事ならこれで必要十分わかる【RSpec】知識ゼロから始めるRSpecの基本構文理解と使い方まで
rspec単体でのシンプルなチュートリアル はじめてのRSpec - まずテスト書いてからコード書くシンプルなチュートリアル
そのあとやったらいいやつ Rspec 入門