我刚刚看了Railscast分的小测验.

使用RSpec和Minitest测试rails应用程序的优缺点是什么?从RSpec转换到Minitest时,我会丢失哪些功能?

推荐答案

我是RSpec开发人员之一,从来没有使用过minitest,所以在阅读这个答案时要考虑我的偏见.

总的来说,RSpec的力量来自这样一个事实:它将如此多的测试概念具体化为第一类对象.当Test::Unit和Minitest使用简单的方法进行断言时,RSpec使用支持否定、self 描述等的一流匹配器对象.RSpec的例子是支持丰富元数据的一流对象;minitest/spec将it个块编译成简单的方法,这些方法不支持相同种类的丰富元数据.RSpec支持使用接受参数的一级构造(共享示例组)指定共享行为;w/minitest您可以使用inheritance or a mixin to re-use tests,但它没有同样的一流支持.RSpec有一个显式的格式化程序API(有许多第三方格式化程序使用它);我不知道minitest有相同种类的一流格式化程序API.

作为一个整天不断运行测试和练习TDD的人,我发现RSpec给我的力量非常有用.然而,许多人发现这是过分的,额外的抽象会增加认知成本.

以下是我认为minitest缺乏的一些特定功能:

  • before(:all)个钩子(注意,这是RSpec的超级用户特性,应该很少使用;在使用RSpec的多年中,我只在少数情况下使用过它)
  • around(:each)个钩子
  • 共享示例组
  • 共享上下文
  • 丰富的元数据支持,可用于控制哪些示例运行、哪些示例组共享上下文包含在其中、哪些示例组模块混合在一起等等.
  • 通过rspec模拟集成支持多种模拟功能;相比之下,Minitest::Mock更简单,也更有限.
  • RSpec有rspec-fire个,这太棒了.

使用Minitest的好处:

  • 它内置于标准库中,因此不需要安装任何额外的内容.
  • 它可以用于def test_blahit 'blah'种样式.
  • 代码库非常小且简单.相比之下,RSpec由于其更老的年龄和附加功能而更大.
  • Minitest的加载速度比RSpec快(它大约有4个代码文件,而RSpec有许多文件分布在3个gem上)——但请注意,RSpec绝不慢;在我这些天的大多数项目中,我在不到一秒钟(通常在不到500毫秒)的时间内收到来自RSpec的测试反馈.

总的来说,这有点像Sinatra vs.Rails,我认为Minitest和RSpec都是不错的 Select ,这取决于你的需求.

最后一件事:如果你更喜欢Minitest的某些特定方面,但你更喜欢RSpec的其他方面,那么它们可以很容易地混合和匹配.如果你感兴趣的话,我会给你wrote a blog post about this美元.

Ruby-on-rails相关问答推荐

Rails 7,返回具有两个单独条件的活动记录关联,一个在父级,一个在子级

Rails 5.1.7:Sprockets::Rails::Helper::AssetNotFound

NoMethodError:Puma::Events:Class 的未定义方法字符串

在 Datatable Ajax 调用中通过 Ajax 更新 div

Rails 7 应用程序 - 引用模型文件时出现未初始化常量错误

Ruby on rails 查询不知道怎么写

无法加载此类文件 -- mysql2/mysql2

升级到设计 3.1 => 获取重置密码令牌无效

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

Rails Associations - has_many => :through - 但相同的模型

Rails:带参数的 URL/路径

Rails 3 返回 HTTP 406 Not Acceptable?

使用 ruby​​ on rails 活动记录插入多条记录

活动管理员:仅自定义新表单

如何在每个操作的基础上禁用 Ruby on Rails 的日志(log)记录?

Rails 生成 has_many 关联

我的 JavaScript 模式/实践很糟糕.我应该go 哪里寻求帮助?

sass-rails 助手image-url、asset-url在 rails 3.2.1 中不起作用

如何为 Rails 控制器添加延迟以进行测试?

我如何为 Rails3/Bundler 供应 gems