gem 入れる
group :test do
gem 'rspec-rails'
end
$ bundle update
RspecをRails用にセットアップ
$ ./bin/rails g rspec:install
出来上がるファイル、フォルダ
(specだけがフォルダ)
- .rspec
- spec
- spec/spec_helper.rb
- spec/rails_helper.rb
試しにモデルスペックを追加してみる
$ mkdir spec/models
$ vim spec/models/blog_spec.rb
describe Blog do
it "なんかテストするよ!"
end
RSpec3からなくなったっぽい記述
.rspecファイルに --require spec_helper
と記載してあると、個々のスペックファイルで require 'spec_helper'
しなくていいみたい。
実行してみる
$ bundle exec rspec
エラー;;
`<top (required)>': uninitialized constant Blog (NameError)
解決策
毎度おなじみStackOverflow
ruby on rails - Rspec doesn't see my model Class. uninitialized constant error - Stack Overflow
どうやらspec_helper.rbに記述が足りないらしい
ここから先の解決策、間違ってた。
コメントによるご指摘で訂正。
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
これって、 rails g rspec:install
で出来てるっぽいんだけど・・・
なぜか私の環境では出来てなかった。。
再度実行したら、無事テスト動いた!
追記(ちょっと余計な行が入ってた)
実行した結果をよーく見てみたら、こんなワーニングが・・・
equiring `rspec/autorun` when running RSpec via the `rspec` command is deprecated. Called from ...dependencies.rb:274:in `require'.
最後の1行要らんらしい
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
# require 'rspec/autorun' 消してください;;
消したらすっきり。ワーニング消えました。。
ここまで間違い。
本当の解決策
コメントのご指摘通り。
スペックファイルの頭に、 require "rails_helper"
と記載すれば良い。
require "rails_helper"
describe Blog do
it "このテストは大丈夫だよ!"
end
最初の解決策で追加した変な設定は不要だった。
そもそも・・ モデルスペックにもgeneratorがあった
モデルスペック作る時に、自分でファイルをサラから作らずに
$ ./bin/rails g rspec:model blog
してみたら、require "rails_helper"
が頭に入った状態でファイルが作られた。
rails g rspec:install
があるんだから、モデルスペック作るのも用意されてる様な気がする・・と思ったけど、やっぱあるんだ。。