7
9

More than 5 years have passed since last update.

Rails newしたアプリケーションに、途中からRspecを入れてみる

Last updated at Posted at 2015-06-22

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
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に記述が足りないらしい

ここから先の解決策、間違ってた。
コメントによるご指摘で訂正。

spec/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行要らんらしい

spec/spec_helper.rb
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  # require 'rspec/autorun' 消してください;;

消したらすっきり。ワーニング消えました。。

ここまで間違い。

本当の解決策

コメントのご指摘通り。

スペックファイルの頭に、 require "rails_helper" と記載すれば良い。

spec/blog_spec.rb
require "rails_helper"

describe Blog do
  it "このテストは大丈夫だよ!"
end

最初の解決策で追加した変な設定は不要だった。

そもそも・・ モデルスペックにもgeneratorがあった

モデルスペック作る時に、自分でファイルをサラから作らずに

$ ./bin/rails g rspec:model blog

してみたら、require "rails_helper" が頭に入った状態でファイルが作られた。
rails g rspec:install があるんだから、モデルスペック作るのも用意されてる様な気がする・・と思ったけど、やっぱあるんだ。。

7
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9