Ruby 指定命名空间类时,如何存根父类? #models/event.rb 类事件

Ruby 指定命名空间类时,如何存根父类? #models/event.rb 类事件,ruby,rspec,rspec2,Ruby,Rspec,Rspec2,您使用RSpec的stub_const方法: 但是仅仅使用类事件可能更简单;按照玛丽安的建议结束 对于您的评论,是否需要在descripe块上方声明?如果没有,也许尝试一下 # models/event.rb class Event < ActiveRecord::Base # ... end # models/event/timeline.rb class Event::Timeline # ... end # spec/event/timeline_spec.rb req

您使用RSpec的
stub_const
方法:

但是仅仅使用
类事件可能更简单;按照玛丽安的建议结束

对于您的评论,是否需要在
descripe
块上方声明?如果没有,也许尝试一下

# models/event.rb
class Event < ActiveRecord::Base
  # ...
end

# models/event/timeline.rb
class Event::Timeline
  # ...
end

# spec/event/timeline_spec.rb
require 'spec_helper'
require 'models/event/timeline' # <- fails since "event" is not required

describe Event::Timeline do
  it '' do
    # ...
  end
end

我认为你不应该这样做。只需加载父类。您的代码应该在生产环境中进行测试,其他一切都是无用的;)我将Event::Timeline与其他一切隔离开来,这更像是一个单元测试,而不是一个集成测试。但所有子类都必须与父类交互。否则就没有理由创建子类。有一个选项,但无论如何我都不推荐它:在需要时间线源代码之前,先做这个:
class事件;结束
。但正如我所说,我不会这么做,最好重新安排你的名称空间/类名称我必须撤销我所有的声明!因为我没有意识到Event::Timeline不是一个子类。对不起,我不能在
it
块外使用
stub\u const
。我尝试添加
类事件;结束
,但当需要
事件
时,它会破坏其他规范,因为它已使用不同的子类(
对象
,而不是
ActiveRecord::Base
)定义。
describe Event::Timeline do
  let(:fake_class) { Class.new }

  before do
    stub_const("Event", fake_class)
  end

  it '' do
  end
end