【问题标题】:How to stub out a entire class如何存根整个班级
【发布时间】:2013-01-30 16:13:57
【问题描述】:

我正在开始重构我的测试以在不加载 Rails 的情况下运行。我的大多数测试仍然是加载 rails 的标准 rspec 测试。我的问题是,在下面的测试文件中,我覆盖了一个在许多其他测试文件中使用的类。因此,即使这些测试通过,其他测试也会失败。在得到很多建议here 后,我希望对那个项目类进行存根。 (我宁愿在这个文件中存根项目类,而不是在所有其他需要它的测试文件中重新加载项目类。)

这是我现在拥有的。

require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
require 'active_support/core_ext/string' #used for '.blank?' method


class Project
  attr_accessor :general_media
  def initialize(attributes = {})
    @general_media = attributes[:general_media]
  end
  include ActiveModel::Validations    
  include ActiveRecord::Callbacks
end

require_relative '../../../app/models/project/media.rb'

describe 'Project::Media' do
  #then all the tests

我试图创建一个 FakeProject 类并通过使用 FakeProject 对 Project 进行存根来继承 Project::Media,但它没有工作。这就是我所拥有的。

require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
require 'active_support/core_ext/string' #used for '.blank?' method


class FakeProject
  attr_accessor :general_media
  def initialize(attributes = {})
    @general_media = attributes[:general_media]
  end
  include ActiveModel::Validations    
  include ActiveRecord::Callbacks
end
class Project; end
require_relative '../../../app/models/project/media.rb'

describe 'Project::Media' do
  before(:all) { stub_constant!("Project", FakeProject) }

首先,我仍在覆盖项目类,其次,stubbig 无法正常工作。我仍然收到有关验证不起作用的错误。

undefined method `validate' for Project::Media:Class (NoMethodError)

有什么建议吗?我的目标是仅为此 media_spec.rb 测试文件中的测试存根 Project 类,而不是覆盖 Project 类对所有测试的行为方式。

【问题讨论】:

  • 厂女擅长:build_stubbed

标签: ruby-on-rails rspec


【解决方案1】:

您可以使用 rspec 语法创建 Fake 类。比如:

let(:fake_class) { Class.new }
stub_const("Project", fake_class)

如果你想为那个 Project 类存根任何方法,你可以这样做:

dummy_class = Project # the same name that you used above
# stub any method and return anything that you want to return
dummy_class.stub_chain(:any_method).and_return(anything) 

【讨论】:

  • 抱歉,不是我问的。但我确实赞成你的回答
猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 2019-05-02
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多