Ruby のプロジェクトで RSpec のテストがパスするまで
はじめに
仕事で Rails を使わないピュアな Ruby のプロジェクトで開発をすることになり、RSpec のテストがパスするまでに少々はまったので、恥を忍んでまとめておきます。
RSpec を動かすまでの手順については、こちらのサイトの手順を参考にさせて頂きました。 qiita.com
環境
rbenv 1.0.0
ruby 2.3.0
事前準備
rbenv で ruby をインストールしておいて下さい。
ディレクトリ構成
今回作成するプロジェクトのディレクトリ構成です。
ソースコードは src 以下に、テストコードは sprc 以下に作成します。
rspec_sample ├── Gemfile ├── Gemfile.lock ├── src └── spec
初期設定
プロジェクトのディレクトリを作成し移動します。
ついでに、ソースを作成する src フォルダも作成しておきます。
$ mkdir rspec_sample $ cd rspec_sample/ $ mkdir src
rbenv で使用する ruby のバージョンを指定します。
bunlder をインストールしていない場合、インストールします。
$ rbenv local 2.3.0 $ gem install bundler
bundler にて rspec をインストール
bundler を初期化しGemfile を生成します。
$ bundle init
Gemfileを以下のように修正します。
source "https://rubygems.org" gem "rspec"
rspec をインストールします。
$ bundle install --path vendor/bundle
rspec の初期設定
.rspec, spec/spec_helper.rb を生成します。
$ bundle exec rspec --init create .rspec create spec/spec_helper.rb
src 以下のファイルを読み込むよう、spec_helper の最後に以下を追記します。
Dir.glob(File.join(File.dirname(__FILE__), "../src/**/*.rb")).each { |f| require f }
上記を追加することで、各 spec ファイルの先頭で必要なファイルを読込まなくても
require 'spec_helper'
をしてあげれば事足りてしまいます。
Rails ぽくて良い感じです。
コードの作成
以下のような構成になるようファイルを生成します。
rspec_sample ├── Gemfile ├── Gemfile.lock ├── src │ ├── libs │ │ └── message.rb │ └── person.rb └── spec ├── libs │ └── message_spec.rb ├── person_spec.rb └── spec_helper.rb
libs/message.rb の作成
src/libs/mesage_spec.rb
spec/libs/mesage_spec.rb
上記を作成して、rspec を実行します。
$ bundle exec rspec
結果がグリーンになってますね。なっているはずです!
person.rb の作成
src/person.rb
message.rb をロードする際、require_relative を使って、相対パスでファイルをロードします。
require 'libs/message'
のように指定して rspec を実行すると、下記のようなエラーが表示されます。
LoadError: cannot load such file -- libs/message
Rails を使用するとファイルの読込はフレームワーク側でやってくれるので意識する必要はありませんが、今回ここではまりました(^^;
sprc/person_spec.rb
message_spec と同様に、先頭に require 'spec_helper'
すればいいのでスマートですね!
上記を作成して、rspec を実行します。
$ bundle exec rspec
結果がグリーンになっていればOKです。
最後に
Rails を使っているときには気づきませんでしたが、Rails の便利さに如何に頼っているかを思い知らされますね。
逆に、Rails を使わないと出来ないことが多いのは、それだけ Rails が優秀だということにもなりますが、、、
RSpec を動かすのに、require_relative ではまるとは...
自分のあまりの無知っぷりに恥ずかしくなりました。
それでも、Ruby という言語を理解できていないからこそ、問題に直面したときに自力で解決できないと思うので、Rails のことを学ぶことも大事ですが、その言語自体をきちんと理解することが大事だと改めて思いました。
今回のサンプルコードと Ruby のプロジェクトのテンプレートをgithub にpushしたので、こちらもよければお使いください。
- 作者: Peter J.Jones
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
- この商品を含むブログ (3件) を見る