Ruby on Rails:从test_unit切换到rspec


75

我正在阅读建议使用的教程rspec,但是我已经经历了许多默认的rails安装。我真的完全不需要重做安装。反正我跑步

$ rails g integration_test named

我懂了

  invoke  test_unit
  create    test/integration/named_test.rb

当我运行时bundlerspec列出了各种宝石,但test_unit没有列出。本教程似乎有Rails调用,rspec而不是test_unit不做任何其他事情。如何使Railsrspec与Integration Test Generator命令一起使用?

Answers:


107

在您的config/application.rb文件中:

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

现在,当您运行生成器时(示例rails generate scaffold post),您将获得rspec测试文件。请记住重新启动服务器。有关生成器的更多信息,请参见:

RailsCasts#216 Generators in Rails 3

如果您确实要使用Integration_test生成器,则需要专门修改命令:

rails g integration_test named --integration-tool=rspec

1
我已经做完了..重启服务器是什么意思?它从未运行过。
爆炸药2012年

1
我的意思是重新启动spork或您的测试界面。如果您已正确执行此操作并执行“ rails g scaffold --help”,则应该将“ rspec”视为默认的测试框架。还要检查我的编辑。
Spyros'3

1
我按照您的指定更新了config / application.rb并运行rails g scaffold --help,它仍然显示test_unit。我需要做些什么来重新运行配置,还是以某种方式手动更改这些设置?
爆炸药

对于希望使用其他方法的将来的用户,请保留此注释以确保完整性:将上述答案与一起使用g.test_framework :test_unit
睡衣

如何切换回去?我可以一次使用两个发电机吗?
DataGreed

72

使用Rails 3.2.8rspec-rails 2.11.4,我发现我的问题出在我的Gemfile中。我rspec-rails参加了:test小组讨论,但没有参加:development。由于Rails默认以开发模式运行(包括在运行generate时),rspec-rails因此必须在您的:development组中才能挂接到生成器。一旦安装好,一切都会正常。


4
+1 RSpec的护栏安装为railitie github.com/rspec/rspec-rails/blob/master/lib/...并配置自己作为测试框架和集成工具。因此,您可以将gem包含在gemfile的共享组中group :development, :test do
brutuscat 2012年

7年后仍然有意义!
格兰特·伯奇迈尔

28

从Rails 3.2.12开始,请按顺序执行以下步骤

rails new app_name --skip-test-unit

在开发测试组中将rspec-rails添加到您的Gemfile中

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

bundle install

运行发电机

rails generate rspec:install

...并清理您现有的测试目录:

rm -Rf $RAILS_ROOT/test    

8
如果项目也已经创建,它将起作用。只需忽略该 rails new命令即可。
Rael Gugelmin Cunha 2014年

当心使用rm -Rf $RAILS_ROOT/test命令,您也将删除邮件预览...
Yoko

9

今天遇到了这个问题。必须使用以下命令更新application.rb:

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

6
不再需要编辑application.rb文件,至少在带有rspec-rails的Rails 3.2上
prusswan 2012年

8

要使用RSpec代替默认的Test :: Unit,请首先运行以下命令

$ rails generate rspec:install

此命令将创建以下文件夹/文件

create  .rspec
create  spec
create  spec/spec_helper.rb

现在,每当您使用Generator生成控制器,模型等Rails组件时,它都会创建相应的RSpec。


如果您的Gemfile中还没有rspec,则此方法将无效(第4条)。请参阅下面的fontno答案。
tgf

如何切换回去?我可以一次使用两个发电机吗?
DataGreed


2

1.在创建新的Rails应用程序时,跳过TestUnit框架,否则它将生成test_unit目录。

$rails new your_app --skip-test-unit

2.将以下代码添加到your_app / config / application.rb文件中:

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

3.将以下代码添加到your_app的Gemfile中:

group :test, :development do gem 'rspec-rails' end 保存并运行bundle install以安装rspec gem

4.初始化spec /目录

rails generate rspec:install

更多详细信息,请参阅:https : //github.com/rspec/rspec-rails


1

我发现我所做的其他一些方法仍然有效的是检查我的拼写...。那解决了我的问题,但是我使用test_unit而不是rspec生成测试。


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

运行脚本/ rails生成rspec:install不会将rspec添加为默认框架。在config / application.rb中添加以下命令,然后它可以工作

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.