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

时间:2010-11-23 18:50:45

标签: ruby-on-rails ruby tdd rspec rspec2

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

rake test:units

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

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

1 个答案:

答案 0 :(得分: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最佳做法来获得spec目录,并制定自己的rake任务,同时运行单元测试和rspec测试。像这样:

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

那将依次运行你的rspec测试然后你的Test :: Unit测试。