我正在研究示例应用程序(@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 endendRSpec.configure do |config| config.include Cell::Rspec,type: :cellend
我需要创建一个存根url_options方法的原因是pathHelpers方法在单元视图中工作,而不必设置一个完整的控制器(带有一个完整的请求对象).
我喜欢它的方式,它使一个非常简约的设置.但是我想知道它是不是因为我只是模仿一个控制器,但是我觉得我没有摆脱它的依赖.你怎么看 ?
解决方法 我知道这篇文章很旧,但我发现你的代码中仍然没有解决问题.您需要将控制器添加到单元格方法的第三个参数,因为单元格中的第二个参数是模型,第三个参数是选项.您可以像下面这样做:
controller_stub = double( url_options: { host: '',path_parameters: '' })args[1] = {} if args.length < 2args[1].merge! controller: controller_stubCapybara.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)endattr_reader :parent_controller
我希望这对你有所帮助.
总结以上是内存溢出为你收集整理的ruby-on-rails – 使用Rspec隔离测试细胞 – 任何推荐?全部内容,希望文章能够帮你解决ruby-on-rails – 使用Rspec隔离测试细胞 – 任何推荐?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)