82

I'm going through a tutorial that has suggested using rspec, but I have already gone through a lot of default rails installation. I really don't want to have to redo the installation at all. Anyway, when I run

$ rails g integration_test named

I get

  invoke  test_unit
  create    test/integration/named_test.rb

When I run bundle, various rspec gems are listed, but test_unit is not. The tutorial seems to have rails invoke rspec instead of test_unit without doing anything additional. How do I get rails to use rspec with the integration test generator command?

Explosion Pills
  • 188,624
  • 52
  • 326
  • 405

9 Answers9

117

In your config/application.rb file :

config.generators do |g|
  g.test_framework :rspec
end

Now when you run your generators (example rails generate scaffold post), you get rspec test files. Remember to restart your server. For more information on generators see:

RailsCasts #216 Generators in Rails 3

If you really want to use the integration_test generator you'll need to specifically modify the command:

rails g integration_test named --integration-tool=rspec
morhook
  • 685
  • 7
  • 19
Spyros
  • 46,820
  • 25
  • 86
  • 129
  • 1
    I had already done that .. what do you mean by restart the server? It was never running. – Explosion Pills Mar 27 '12 at 06:02
  • 1
    i mean restarting spork or your test interface. If you have properly done that and execute 'rails g scaffold --help' you should be seeing 'rspec' as the default testing framework. Check my edit as well. – Spyros Mar 27 '12 at 06:30
  • 1
    I updated the config/application.rb as you specified and ran `rails g scaffold --help` and it *still* says test_unit. Is there something I need to do to rerun the configuration or some way to manually change these settings? – Explosion Pills Apr 12 '12 at 11:58
  • For future users wanting to go the other way, leaving this comment for completeness: Use the above answer with `g.test_framework :test_unit` . – pjammer Aug 05 '14 at 12:50
  • how do I switch back? Can I use both generators at once? – DataGreed May 06 '19 at 20:06
  • with the Rails app I'm testing on 6.1 (not sure which version this became true...) ... this method no longer works and gives me `configuration.rb:97:in `method_missing': undefined method `test_framework' for # (NoMethodError)` ; For Rails 6-- see other answer about the gem being in the :test group but not the :development group – Jason FB Feb 05 '21 at 21:29
73

Working with Rails 3.2.8 and rspec-rails 2.11.4, I discovered that my problem was in my Gemfile. I had rspec-rails in the :test group but not the :development group. Since Rails defaults to running in development mode (including when you're running generate), rspec-rails has to be in your :development group for it to hook into the generators. Once I had that in place, everything worked fine.

tovodeverett
  • 1,053
  • 8
  • 7
  • 4
    +1 rspec-rails install as railitie https://github.com/rspec/rspec-rails/blob/master/lib/rspec-rails.rb#L6-7 and configures itself as test framework and integration tool. So one can include the gem in a shared group in the gemfile ```group :development, :test do``` – brutuscat Nov 12 '12 at 10:23
  • Still relevant 7 years later! – Grant Birchmeier Nov 12 '19 at 18:54
31

As of Rails 3.2.12, follow these steps in order

rails new app_name --skip-test-unit

Add rspec-rails to your Gemfile in the development, test group

group :development, :test do
  gem 'rspec-rails'
end

Run bundle install

Run the generator

rails generate rspec:install

... and cleanup your existing test directory:

rm -Rf $RAILS_ROOT/test    
hd1
  • 33,938
  • 5
  • 80
  • 91
fontno
  • 6,642
  • 6
  • 36
  • 43
9

Came across this issue today. application.rb has to be updated with:

config.generators do |g|
  g.test_framework :rspec
  g.integration_tool :rspec
end
iRonin
  • 470
  • 4
  • 12
8

To use RSpec instead of default Test::Unit, run following command first

$ rails generate rspec:install

This command will create following folder/files

create  .rspec
create  spec
create  spec/spec_helper.rb

Now whenever you used generator to generate rails components like controller, model etc, it will create corresponding RSpecs.

Amit Patel
  • 15,609
  • 18
  • 68
  • 106
3

In config/application, add this code

 config.generators do |g|
       g.test_framework  :rspec
       g.integration_tool :rspec
 end
Amrit Dhungana
  • 4,371
  • 5
  • 31
  • 36
2

1. when create new rails app, skip TestUnit framework, or it will generate test_unit directory.

$rails new your_app --skip-test-unit

2. add below code to your_app/config/application.rb file:

config.generators do |g| g.test_framework :rspec end

3. add below code to your_app's Gemfile:

group :test, :development do gem 'rspec-rails' end save it, and run bundle install to install rspec gem

4. Initialize the spec/ directory

rails generate rspec:install

more details, please refer: https://github.com/rspec/rspec-rails

xautjzd
  • 307
  • 1
  • 11
1

What I found that I did that some of the other methods works still is to check my spelling....I had what @tovodeverett had grouping rspec-rails with :development and :test but spelt development incorrectly. That fixed my issue but I was generating tests with test_unit instead of rspec.

zigloo99
  • 134
  • 1
  • 10
1
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052617_create_accounts.rb
      create    app/models/account.rb
      invoke    test_unit
      create      test/models/account_test.rb
      create      test/fixtures/accounts.yml
$ rails d model Account

Running script/rails generate rspec:install does not add rspec as default framework. Added below command in config/application.rb and then it works

config.generators do |g|
  g.test_framework :rspec
end
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052957_create_accounts.rb
      create    app/models/account.rb
      invoke    rspec
      create      spec/models/account_spec.rb
$ rails -v
Rails 4.0.2