Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 摩卡咖啡比RSpec'有什么优势;s内置于模拟框架中?_Ruby On Rails_Ruby_Mocking_Rspec - Fatal编程技术网

Ruby on rails 摩卡咖啡比RSpec'有什么优势;s内置于模拟框架中?

Ruby on rails 摩卡咖啡比RSpec'有什么优势;s内置于模拟框架中?,ruby-on-rails,ruby,mocking,rspec,Ruby On Rails,Ruby,Mocking,Rspec,我注意到很多人更喜欢Mocha而不是RSpec的内置模拟框架。有人能解释一下Mocha或任何替代品相对于在模拟框架中构建的RSpec的优势吗?我只使用Mocha一次,因为我不使用RSpec。我使用test/unit,test/unit没有内置stubing和mocking。据我所知,Mocha支持双重注入(也称为部分mocking,在rr中也支持),但不确定RSpec是否也支持此功能 另外,对于那些喜欢在测试框架之间切换的人来说,Mocha是一个通用的解决方案,适用于测试/单元、Shoulda等

我注意到很多人更喜欢Mocha而不是RSpec的内置模拟框架。有人能解释一下Mocha或任何替代品相对于在模拟框架中构建的RSpec的优势吗?

我只使用Mocha一次,因为我不使用RSpec。我使用test/unit,test/unit没有内置stubing和mocking。

据我所知,Mocha支持双重注入(也称为部分mocking,在rr中也支持),但不确定RSpec是否也支持此功能


另外,对于那些喜欢在测试框架之间切换的人来说,Mocha是一个通用的解决方案,适用于测试/单元、Shoulda等。对所有这些lib使用RSpec mock将是一种过分的做法。

我真正喜欢的一个特殊特性是能够剔除类的所有实例。很多时候,我使用RSpec mock执行以下操作:

stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
有了摩卡咖啡,就变成了:

Car.any_instance.stubs(:speed).returns(100)

我发现Mocha版本更清晰、更明确。

自从2009年提出这个问题以来,Ruby mocking框架已经发展了很多。下面是2013年的一个小比较:

期望值

  • 使用Rspec模拟:
    expect(用户)。接收(:say_hello)
  • 使用摩卡:
    user.expected(:say_hello)。一次
截短对象

  • 使用Rspec模拟:
    user=double(名称:'johndoe')
  • 摩卡咖啡:
    user=stub(名字:“John Doe”)
删除任何内容

  • 使用Rspec mock:
    User.any\u实例.stub(:name.)和\u return('John Doe')
  • 使用Mocha:
    User.any_instance.stubs(:name).returns('John Doe')
它们提供相同的设施,可以与Rspec一起使用,也可以不与Rspec一起使用。

因此,我想说,选择一种而不是另一种是个人品味的问题(他们的味道非常相似)。

任何情况都可能是使用摩卡咖啡的原因。它非常强大,可以节省很多时间。你现在可以用RSpec2做到这一点:是的,这个答案已经过时了。是否可以“取消选中”它?现在是一个独立项目,可用于任何非Rspec项目。现在是一个独立的项目,可以在任何非Rspec项目中使用