首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Minitest有类似于allow_any_instance_of的RSpec吗?

Minitest有类似于allow_any_instance_of的RSpec吗?
EN

Stack Overflow用户
提问于 2020-06-17 13:39:23
回答 2查看 1.3K关注 0票数 4

来自文档

rspec-mocks提供了两个方法,allow_any_instance_ofexpect_any_instance_of,它们将允许您对类的任何实例进行存根或模拟。它们被用于代替允许或期望:

代码语言:javascript
复制
allow_any_instance_of(Widget).to receive(:name).and_return("Wibble")

对于使用Minitest的类的所有实例,是否有类似于此特性的模拟方法?

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 17:15:47

根据Minitest文档,您只能模拟单个实例。

https://github.com/seattlerb/minitest#mocks-

在看不到整个代码的情况下,很难判断,但您的体系结构可能会得到改进。例如,您可以使用依赖项注入来避免allow_any_instance_of,还可以使类更易于扩展。

而不是做

代码语言:javascript
复制
class Foo
  def initialize
    @widget = Widget.new
  end

  def name
    widget.name
  end
end

做你的测试

代码语言:javascript
复制
it "does expect name" do
  allow_any_instance_of(Widget).to receive(:name).and_return("Wibble")

  Foo.new.name
end

您可以像这样注入小部件类

代码语言:javascript
复制
class Foo
  def initialize(widget_class = Widget)
    @widget = widget_class.new
  end

  def name
    widget.name
  end
end

在你的规范里

代码语言:javascript
复制
it "does expect name" do
  widget = double()
  widget.stub(:name) { 'a name' }

  foo = Foo.new(widget)

  expect(foo.name).to eq('a name')
end

该代码现在遵循开放-封闭原则,并且更易于扩展.但是很难在没有看到代码的情况下判断这是否是一个可行的解决方案。

在这里https://sourcediving.com/testing-external-dependencies-using-dependency-injection-ad06496d8cb6的一篇博客文章中总结了这一点

票数 1
EN

Stack Overflow用户

发布于 2021-12-07 10:27:10

一年后,我找到了这个问题的详细答案:在最小的地方没有这样的特性,这里就是为什么:

  1. 它不符合Minispec作者的设想
  2. 在某些情况下,它可以破坏stub的行为。

但是有一个创业板为块的作用域添加了stub_any_instance。该创业板还上市在已知扩展的最小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62430417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档