gpt4 book ai didi

ruby-on-rails - RSpec中mock和mock_model有什么区别

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:34 25 4
gpt4 key购买 nike

我最近看到了不同的教程,其中人们同时使用了 mockmock_model 函数。

RSpec tutorial for controllers他们使用 mock_model 函数,但就在 documentation of RSpec 中,只有mock函数,没有mock_model

我尝试自己运行一些测试,但我没有发现任何真正的区别,因为当我使用这两个函数中的任何一个时一切正常,所以有什么区别吗?

最佳答案

正如 jenger 所说,mock_model 是为事件记录构建的扩展:

这是 1.2.6 中的来源:

     def mock_model(model_class, options_and_stubs = {})
id = options_and_stubs[:id] || next_id
options_and_stubs = options_and_stubs.reverse_merge({
:id => id,
:to_param => id.to_s,
:new_record? => false,
:errors => stub("errors", :count => 0)
})
m = mock("#{model_class.name}_#{id}", options_and_stubs)
m.__send__(:__mock_proxy).instance_eval <<-CODE
def @target.as_new_record
self.stub!(:id).and_return nil
self.stub!(:to_param).and_return nil
self.stub!(:new_record?).and_return true
self
end
def @target.is_a?(other)
#{model_class}.ancestors.include?(other)
end
def @target.kind_of?(other)
#{model_class}.ancestors.include?(other)
end
def @target.instance_of?(other)
other == #{model_class}
end
def @target.class
#{model_class}
end
CODE
yield m if block_given?
m
end

所以它有点多,但是它

  • 将 id 与序列中的下一个打桩
  • stub to_param
  • stub new_record?假的
  • stub 错误,因此它认为没有错误

它还用一堆东西扩展了模型实例。

关于ruby-on-rails - RSpec中mock和mock_model有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com