我应该如何将RSpec与Rake,Rails和我现有的测试集成?

Jef*_*eff 3 ruby tdd rspec ruby-on-rails rspec2

我想开始使用RSpec为我的Rails应用程序编写测试,但是我有许多使用Test :: Unit编写的现有测试.我想继续只需从命令行运行所有测试(或所有单元测试,功能测试等),类似于

rake test:units
Run Code Online (Sandbox Code Playgroud)

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

现在,我想我希望我的RSpec测试与我现有的测试,测试/单元,测试/功能等一起存在.实现这一目标的最佳方法是什么?或者这甚至是一个好主意?也就是说,我对RSpec(以及Ruby和Rails)很新,所以也许保持RSpec分离是一种更好的做法.不管它们存储在文件系统的哪个位置,我仍然需要能够使用单个rake任务运行所有测试,并且我需要使用rcov收集整个测试语料库的代码覆盖率数字,我已经在做我现有的测试了.

jer*_*son 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
Run Code Online (Sandbox Code Playgroud)

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

你最好的选择可能就是遵循rspec的最佳实践来制作一个spec目录,并制定你自己的rake任务,同时运行单元测试和rspec测试.像这样的东西:

task :run_tests do
  system("rspec spec/")
  system("rake test:units")
end
Run Code Online (Sandbox Code Playgroud)

那将运行你的rspec测试,然后轮流你的Test :: Unit测试.