加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Rspec隔离测试细胞 – 任何推荐?

发布时间:2020-12-17 02:07:39 所属栏目:百科 来源:网络整理
导读:我正在尝试Apotonick的Trailblazer宝石,它在Rails上带来了更多的结构,我真的很喜欢我到目前为止尝试过的东西,但还没有接受所有这些.这是Trailblazer的一个优势,你可以逐步深入研究它,将它逐步引入你的Rails项目.我买了一本开拓者书,我现在正在关注这本书,这
我正在尝试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

我希望这对你有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读