代码之家  ›  专栏  ›  技术社区  ›  ruby-digger

Rspec:如何测试局部渲染和参数?

  •  1
  • ruby-digger  · 技术社区  · 11 年前

    我正在尝试用Rspec测试控制器的这一部分:

    def popup_company
      if params[:partial].present?
        render partial: "popup_company/pages", locals: { tab_filter: params[:tab_filter] }
      end
    end
    

    以下是我的控制器规格,用于测试上述部件:

    controller.should_receive(:render).with({
    :partial => 'popup_company/pages',
    :locals => {tab_filter: params[:tab_filter]}
    })
    

    然而,我得到了这个错误:

    undefined local variable or method `params'
    

    伙计们,你们能告诉我应该改变什么来克服这个错误吗。我很感激你的帮助!

    2 回复  |  直到 11 年前
        1
  •  0
  •   ruby-digger    11 年前

    所以params[:tab_filter]在您的请求中,所以它可能在您的获取中。也就是说,你有这样的东西:

    get :popup_company, tab_filter: 'XXXXX', partial: 'YYYYY'
    

    在您的规范中。您应该为tab_filter参数创建一个变量随机值,并使用它来验证传递给渲染的适当值。有点像

    tab_filter = SecureRandom.hex(10)
    get :popup_company, tab_filter: tab_filter, partial: 'YYYYY'
    controller.should_receive(:render).with({
      partial: 'popup_company/pages',
      locals: { tab_filter: tab_filter } })
    

    或者,您可以使用 render_template('popup_company/pages') spec以确认正在渲染模板,并根据渲染视图的内容测试选项卡过滤器。

        2
  •  0
  •   Phlip    11 年前

    你的 params 是在规格方面的代码;它只是试图成为一个局部变量。输入你期望的内容 params[:tab_filter] 要包含。

    而且,一般来说,你不应该写测试——哦,我的意思是“示例”——只重复代码所说的内容。你不在乎你的控制器调用了一个分部;您需要注意的是,控制器以包含某某值的HTML进行响应。