ruby-on-rails – 使用Rspec隔离测试细胞 – 任何推荐?
我正在尝试Apotonick的Trailblazer宝石,它在Rails上带来了更多的结构,我真的很喜欢我到目前为止尝试过的东西,但还没有接受所有这些.这是Trailblazer的一个优势,你可以逐步深入研究它,将它逐步引入你的Rails项目.我买了一本开拓者书,我现在正在关注这本书,这引出了我的问题.
我正在研究示例应用程序(@see https://github.com/apotonick/gemgem-trbrb),但我正在使用rspec. 我想单独测试单元输出.在本书中,测试框架是Test :: Unit,一些辅助方法附带了Test :: Unit的单元格. 使用rspec这是另一个故事…我尝试了rspec-cells,但它似乎不适用于在Trailblazer中使用的当前单元版本(4.0). 这是代码(也在这里:https://github.com/demental/gemgem-trbrb/blob/3ec9df1d5f45b880f834486da3c150d4b65ec627/spec/support/cells.rb) module Cell module Rspec private def concept(name,*args) controller_stub = double( url_options: { host: '',optional_port: 80,protocol: 'http',path_parameters: '' } ) Capybara.string(Cell::Concept.cell name,controller_stub,*args) end end end RSpec.configure do |config| config.include Cell::Rspec,type: :cell end 我需要创建一个存根url_options方法的原因是pathHelpers方法在单元视图中工作,而不必设置一个完整的控制器(带有一个完整的请求对象). 我喜欢它的方式,它使一个非常简约的设置.但是我想知道它是不是因为我只是模仿一个控制器,但是我觉得我没有摆脱它的依赖.你怎么看 ? 解决方法
我知道这篇文章很旧,但我发现你的代码中仍然没有解决问题.
您需要将控制器添加到单元格方法的第三个参数,因为单元格中的第二个参数是模型,第三个参数是选项.您可以像下面这样做: controller_stub = double( url_options: { host: '',path_parameters: '' } ) args[1] = {} if args.length < 2 args[1].merge! controller: controller_stub Capybara.string(Cell::Concept.cell(name,*args).to_s) 方法Cell :: Concept.cell只是ViewModel.cell的包装,当你看这个方法时,你可以看到它将控制器添加到options参数: def cell(name,model=nil,options={}) ViewModel.cell(name,model,options.merge(controller: parent_controller)) end 更深入的parent_controller在ViewModel类中定义并在构造函数中初始化: def initialize(model=nil,options={}) @parent_controller = options[:controller] setup!(model,options) end attr_reader :parent_controller 我希望这对你有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |