如何在Rspec中使用ActiveModel :: Lint :: Tests

时间:2015-04-20 09:00:21

标签: rspec activemodel lint

对于默认的Rails,您可以添加所谓的ActiveModel::Lint::Tests以查看您的模型是否符合ActiveModel的部分内容。

我想在我的Rspec测试中称这些或其等价物。

  • 我不想测试确切的行为:lint测试仅指出存在某个接口。我只想说明界面存在。
  • 我宁愿不test too close implementation。仅测试包含模块与测试存在的接口并不完全相同。

是否有一个技巧可以运行并在rspec示例中包含Rails核心ActiveModel::Lint::Tests?是否有替代品,专门为Rspec制造,进行这种棉绒测试?

一些背景

我正在构建不从Activerecord::Base继承的模型,而是充当工厂或状态机。在Rails中也称为服务对象。这些应该感觉像用户的ActiveModels。像

这样的事情
@services << CompositeService.new(name: 'foo', children: [{ name: 'bar' }])
render @services

应该是可能的。这样的CompositeService应该具有activemodel命名,部分路径,缓存id等。

1 个答案:

答案 0 :(得分:0)

我正在编写一个提供with open('file.txt') as f: print(f.readline().translate(None,"'[]\n").split(",")) ['a', 'b', 'c'] - 兼容模型并使用RSpec 3.x的gem。

为了获得lint测试,我添加了ActiveModel作为开发依赖项。这也会带来activemodel及其ActiveSupport。我想我可以像过去那样使用this gist之类的内容,但遇到issue试图让测试使用Minitest的{​​{1}}。

我最终将这些放在一起(归功于要点的作者)并将其放入Minitest

assert

到目前为止,这似乎有效,我收到如下错误消息:

spec/support

这不太理想,但现在对我来说很好。棉绒测试非常简单 从头开始实现共享示例将是非常简单的 (参见the source),但这样我就可以依靠gem来使测试保持最新状态。