3

我想开始使用 RSpec 为我的 Rails 应用程序编写测试,但是我有很多使用 Test::Unit 编写的现有测试。我想继续能够简单地从命令行运行所有测试(或所有单元测试、功能测试等),例如

rake test:units

或者其他什么,让它运行所有的单元测试,无论它们是用 Test::Unit 还是 RSpec 编写的。而且我绝对不想浪费大量时间将我现有的测试转换为 RSpec;这是一个非首发。

现在我在想我希望我的 RSpec 测试与我现有的测试一起存在,在测试/单元、测试/功能等中。实现这一点的最佳方法是什么?或者这甚至是一个好主意?也就是说,我对 RSpec(以及 Ruby 和 Rails,就此而言)还很陌生,所以将 RSpec 分开可能是一种更好的做法。不过,无论它们存储在文件系统的什么位置,我仍然需要能够使用单个 rake 任务运行所有测试,并且我需要使用 rcov 收集整个测试语料库的代码覆盖率,这我已经在使用我现有的测试了。

4

1 回答 1

6

编辑:修复了一些关于 Rspec rails 目录结构的错误陈述。


Rspec 通常将其测试放在一个单独的目录结构中,spec/如下所示:

spec/
├── controllers
│   ├── pages_controller_spec.rb
│   └── users_controller_spec.rb
├── helpers
│   ├── pages_helper_spec.rb
│   └── users_helper_spec.rb
├── models
│   └── user_spec.rb
├── spec_helper.rb
└── views
    ├── pages
    │   └── home.html.haml_spec.rb
    └── users
        ├── index.html.haml_spec.rb
        └── show.html.haml_spec.rb

它有一个用于模型、控制器和视图的单独目录。我不确定 Test::Unit 是如何构建其目录的,但这是 Rspec 的默认目录结构。注意spec_helper.rb文件。这个文件告诉 Rspec 在哪里寻找规范,并且有一些其他的配置选项。

你最好的选择可能只是遵循 rspec 最佳实践来拥有一个specdir,并制作你自己的 rake 任务来运行单元测试和 rspec 测试。像这样的东西:

task :run_tests do
  system("rspec spec/")
  system("rake test:units")
end

这将运行您的 rspec 测试,然后依次运行您的 Test::Unit 测试。

于 2010-11-23T19:54:12.830 回答