コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

RSpecだけやる

はじめに

このブログを読んでいる皆さんはおそらく息を吐くようにRSpecを書いている方々ばかりだと思うので恐縮なんですが、僕は初心者なんでまとめて置きます。あらかじめ伝えて置きますがRailsの話は一切ありません。このブログを読んでいる皆様方の得意言語が "Rails" であるのは重々承知なのですが、申し訳ない僕はRSpecだけやりたいのでそれをやるのです。

概要

そんなわけでまずはRSpecとはなんぞやという話を3行ぐらいでやっていきます。まあ、細かいことは公式サイトを見ましょう。

公式
rspec.info
RSpecとはこのようなものです。そう、Rubyで楽しくTDDテスト駆動開発するやつです。TDDについては以下のようなサイクルでやっていくことを指します。

・失敗するテストを書く(RED)
・できる限り早く、テストに通るような最小限のコードを書く(Green)
・コードの重複を除去する(Refactor)

へー、そうなんだ。ということでそういうツールなのがわかったので早速インストールします。さてRSpecなんですが4種類あります。GitHubの方にはもっとあるように見えるけど気にしてはいけない。

rspec-core … 基本機能
rspec-expectations … マッチ処理に使えるやつ
rspec-mocks … モック使ったテストに使えるやつ
rspec-railsRailsで使えるテストフレームワーク

参考
RSpec documentation

ざっくりこんなやつ。今回Rails使わないのでrspec-railsの出番はなしです。一体どれを使えばいいんだとなりますがgem install rspecで上三つ落とせます。ということで早速触っていきます。

動かしてみる
# 導入
$ gem install rspec
# プロジェクトセットアップ
$ rspec --init
  create   spec/spec_helper.rb
  create   .rspec

.rspecファイルが設定ファイルらしい。細かい書き方ここにあった。
Home · rspec/rspec Wiki · GitHub
--require spec_helperってのrequireなしで動かしてくれるやつらしいですね。あとなんか知らんけど--colorつけて色つくようにしてみる。

そんじゃあハローワールドでも書いて動かしてみます(?)。

# RSpec使うグループの宣言
RSpec.describe 'is this Hello World?' do
    # やることの名前
    it 'This is include in Hello World' do
      # 期待する動作 *失敗しないとログに表示されないので失敗させる
      expect("failure word").to include("Hello World")
    end
  end
$ rspec ./spec/***.rb

F

Failures:

  1) is this Hello World? This is include in Hello World
     Failure/Error: expect("failure word").to include("Hello World")
       expected "failure word" to include "Hello World"
     # ./spec/rpectest.rb:8:in `block (2 levels) in <top (required)>'

Finished in **** seconds (files took **** seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/***.rb:6 # is this Hello World? This is include in Hello World

無事指定した用語に"Hello World"は含まれていないよというエラーが出ました。

黒い画面の方の問題なんだろうけど日本語対応できない……。なので英語で書きます。ツールの使い方よりも英語の書き方のせいで難しくなっているのではないかという疑惑でてきました。まあなんかしら調べれば日本語化対応できるものあんでしょ。調べるの面倒なので今回はこのままやっていきます。んで、指摘されてる行上のサンプルとずれてるけど許して無駄なコメントアウト入れてる分だから…。


といった感じにexpect内に必要情報をねじ込んでやればテストできるっぽいです。こんな感じに。

myWord = "failure word"

# RSpec使うグループの宣言
RSpec.describe 'is this Hello World?' do
    # やることの名前
    it 'This is include in Hello World' do
      # 期待する動作
      expect(myWord).to include("Hello World")
    end
  end

というわけでRSpecだけやりました。こんな感じに使えばいいっぽいですね。美しいテストの書き方とか知りません。僕はRSpec触りたいだけでこの記事書いてます。そもそも作るものがなければTDDできないのです。



おわり