【问题标题】:How should I integrate RSpec with Rake, Rails and my existing tests?我应该如何将 RSpec 与 Rake、Rails 和我现有的测试集成?
【发布时间】:2011-05-14 15:54:40
【问题描述】:

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

rake test:units

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

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

【问题讨论】:

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


    【解决方案1】:

    编辑:修正了一些关于 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 测试。

    【讨论】:

    • 这是否意味着我不应该使用 RSpec 来创建单元测试和功能测试?本质上,您的回答是告诉我 rspec 测试完全是一种单独的测试类型。此外,使用这种组织系统,似乎无法将仅测试单个单元的 rspec 测试与用作更大功能或集成测试的那些分开。我希望能够在我的测试中保持这种分离水平。对于像我正在从事的项目这样的大型项目来说,只有一类测试是不可接受的。
    • 只测试你的控制器或模型的 Rspec 测试是单元测试,如果它们做得好的话。他们可以测试您希望他们测试的任何内容。当您安装 rspec_rails 时,它假定您想要将模型、视图、控制器和助手作为单元进行测试。但是,您也可以创建更多测试作为功能测试。您不仅限于 Rspec 创建的目录。您可以轻松创建一个“功能”目录并将所有功能测试也放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多