我想开始使用RSpec为我的Rails应用程序编写测试,但我有很多使用Test :: Unit编写的现有测试。我想继续只需从命令行运行所有测试(或所有单元测试,功能测试等),例如
rake test:units
或者其他什么,让它运行所有单元测试,无论它们是用Test :: Unit还是RSpec编写的。而且我绝对不想浪费大量时间将我现有的测试转换为RSpec;那是一个非首发。
现在我想我希望我的RSpec测试与我现有的测试,测试/单元,测试/功能等一起存在。实现这一目标的最佳方法是什么?或者这甚至是一个好主意?也就是说,我对RSpec(以及Ruby和Rails)很新,所以也许保持RSpec分离是一种更好的做法。不管它们存储在文件系统的哪个位置,我仍然需要能够使用单个rake任务运行所有测试,并且我需要使用rcov收集整个测试语料库的代码覆盖率数字,我已经在做现有的测试了。
答案 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测试。