Ruby on rails 如何测试使用params散列的helper方法?

Ruby on rails 如何测试使用params散列的helper方法?,ruby-on-rails,rspec,view-helpers,Ruby On Rails,Rspec,View Helpers,我想实现一个类似于stackoverflow的标签系统,在右上角有一个带有标签的框,我还有从params哈希中删除标签的链接。我的方法在浏览器中正常工作。但是我找不到一种方法来测试它 def tags_list_with_destroy_links if params[:tags] li = "" p = params[:tags].split("+") # '/tagged/sea+ship+sun' => ['sea', 'ship', 'sun']

我想实现一个类似于stackoverflow的标签系统,在右上角有一个带有标签的框,我还有从params哈希中删除标签的链接。我的方法在浏览器中正常工作。但是我找不到一种方法来测试它

def tags_list_with_destroy_links
    if params[:tags]
      li = ""
      p = params[:tags].split("+") # '/tagged/sea+ship+sun' => ['sea', 'ship', 'sun']
      p.map do |t|
        remove_link = if p.count  >= 3
                        c = p.reject {|item| item == t }
                        a = c.join("+")
                        {:tags => a}
                      elsif p.count == 2
                        c = p.reject {|item| item == t }
                        {tags: c[0]}
                      else
                        questions_url
                      end

        li << content_tag(:li) do
          link_to(t, questions_tags_path(t), class: 'tag') +
              link_to( '', remove_link , class: 'icon-small icons-cross')
        end
      end

      ul = content_tag(:ul, li.html_safe)
      ul << tag(:hr)
    end
  end
但它返回:

<a class=\"tag\" href=\"/questions/tagged/sea+ship+sun\">sea</a><a class=\"icon-small icons-cross\" href=\"/questions/tagged/sea+ship+sun\"></a></li>

如有必要,还应拆下连杆

href=“/questions/taged/ship+sun”无海


如果您有任何建议,我将不胜感激。

参数字段将被解析为正确的ruby数据结构(哈希、数组、字符串等)。无需手动拆分项目,如
+
,如果存在嵌套参数,它将作为params对象的一部分返回:

{tags: ["sea", "ship", "sun"]}
要访问数据,或创建关于测试中存在的参数数据的假设,您需要创建一个存根。您就快到了,请尝试以下内容:

helper.stub!(:params).and_return({tags: ["sea", "ship", "sun"]})
一旦参数被正确地存根,您就可以检查helper方法的输出以确保其有效性(这称为期望值):


params字段将被解析为正确的ruby数据结构(哈希、数组、字符串等)。无需手动拆分项目,如
+
,如果存在嵌套参数,它将作为params对象的一部分返回:

{tags: ["sea", "ship", "sun"]}
要访问数据,或创建关于测试中存在的参数数据的假设,您需要创建一个存根。您就快到了,请尝试以下内容:

helper.stub!(:params).and_return({tags: ["sea", "ship", "sun"]})
一旦参数被正确地存根,您就可以检查helper方法的输出以确保其有效性(这称为期望值):


(1) 空格不会总是显示为
+
,有时会显示为
%20
。(2) 助手们(IMO)不应该看
params
,如果你把
params
作为一个参数传递给助手,那么你就得到了一个更简洁的设计,你的测试问题就消失了。感谢你的建议,我突然意识到我只在remove_链接中添加了hash,没有任何控制器和操作的参考,因此,添加问题\u标记\u url标记:“…”解决了问题(1)空间不会总是显示为
+
,有时会显示为
%20
。(2) 助手们(IMO)不应该看
params
,如果你把
params
作为一个参数传递给助手,那么你就得到了一个更简洁的设计,你的测试问题就消失了。感谢你的建议,我突然意识到我只在remove_链接中添加了hash,没有任何控制器和操作的参考,因此,添加问题“\u标签”\u url标签:“…”解决了问题5看起来助手不再响应存根了!在Rails 5上尝试allow(helper).to receive(:params).and_return({tags:[“sea”,“ship”,“sun”]}),看起来helper不再响应存根了!尝试允许(helper).接收(:params).和返回({tags:[“sea”,“ship”,“sun”]})