Ruby 指定命名空间类时,如何存根父类? #models/event.rb 类事件
您使用RSpec的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
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