Ruby on Rails: Switch from test_unit to rspec

2019-01-30 02:13发布

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?

9条回答
爷、活的狠高调
2楼-- · 2019-01-30 02:27

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.

查看更多
▲ chillily
3楼-- · 2019-01-30 02:28

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.

查看更多
倾城 Initia
4楼-- · 2019-01-30 02:34

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    
查看更多
孤傲高冷的网名
5楼-- · 2019-01-30 02:46

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
查看更多
SAY GOODBYE
6楼-- · 2019-01-30 02:47

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

查看更多
混吃等死
7楼-- · 2019-01-30 02:47
$ 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
查看更多
登录 后发表回答