ChatGPT解决这个技术问题 Extra ChatGPT

Ruby on Rails:从 test_unit 切换到 rspec

我正在阅读建议使用 rspec 的教程,但我已经完成了很多默认的 rails 安装。我真的不想重做安装。无论如何,当我跑步时

$ rails g integration_test named

我明白了

  invoke  test_unit
  create    test/integration/named_test.rb

当我运行 bundle 时,会列出各种 rspec gem,但没有列出 test_unit。本教程似乎让 rails 调用 rspec 而不是 test_unit 而没有做任何额外的事情。如何让 rails 将 rspec 与集成测试生成器命令一起使用?


m
morhook

在您的 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

我已经这样做了..重新启动服务器是什么意思?它从来没有运行过。
我的意思是重新启动 spork 或您的测试界面。如果您正确地完成了该操作并执行了“rails g scaffold --help”,您应该将“rspec”视为默认测试框架。也检查我的编辑。
我按照您的指定更新了 config/application.rb 并运行了 rails g scaffold --help,它仍然显示 test_unit。我需要做些什么来重新运行配置或以某种方式手动更改这些设置吗?
对于希望采用其他方式的未来用户,请留下此评论以确保完整性:将上述答案与 g.test_framework :test_unit 一起使用。
我该如何切换回来?我可以同时使用两个生成器吗?
t
tovodeverett

使用 Rails 3.2.8rspec-rails 2.11.4,我发现问题出在我的 Gemfile 中。我在 :test 组中有 rspec-rails,但在 :development 组中没有。由于 Rails 默认在开发模式下运行(包括在您运行 generate 时),rspec-rails 必须在您的 :development 组中才能挂接到生成器。一旦我把它做好了,一切都很好。


+1 rspec-rails 安装为 railitie github.com/rspec/rspec-rails/blob/master/lib/… 并将自身配置为测试框架和集成工具。因此可以将 gem 包含在 gemfile group :development, :test do 的共享组中
7年后仍然有意义!
h
hd1

从 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    

如果项目也已经创建,这将起作用。只需忽略 rails new 命令。
注意使用 rm -Rf $RAILS_ROOT/test 命令,您也会删除邮件预览...
i
iRonin

今天碰到这个问题。 application.rb 必须更新为:

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

不再需要编辑 application.rb 文件,至少在带有 rspec-rails 的 Rails 3.2 上
A
Amit Patel

要使用 RSpec 而不是默认的 Test::Unit,请先运行以下命令

$ rails generate rspec:install

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

create  .rspec
create  spec
create  spec/spec_helper.rb

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


如果您的 Gemfile 中还没有 rspec,这将不起作用(rails 4)。请参阅下面的fontno答案。
我该如何切换回来?我可以同时使用两个生成器吗?
A
Amrit Dhungana

在配置/应用程序中,添加此代码

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

x
xautjzd

1.新建rails app时,跳过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


z
zigloo99

我发现我所做的其他一些方法仍然有效的是检查我的拼写....我有 @tovodeverett 将 rspec-rails 与 :development 和 :test 分组但拼写不正确的内容。这解决了我的问题,但我使用 test_unit 而不是 rspec 生成测试。


A
Abhishek Bose
$ 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

运行 script/rails generate 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