Rspec 如何测试我的表单助手

Rspec 如何测试我的表单助手,rspec,rspec-rails,Rspec,Rspec Rails,我已经编写了一个rails表单助手,但我不知道如何为它编写测试。有人能帮忙吗?这是帮助代码 module FormHelper def dropdown(form, obj_symbol, options, selected_value) form.select obj_symbol, options_for_select(options.collect { |s| [s[0].titleize, s[0]] }, selected: selected_value), {}, {:c

我已经编写了一个rails表单助手,但我不知道如何为它编写测试。有人能帮忙吗?这是帮助代码

module FormHelper
  def dropdown(form, obj_symbol, options, selected_value)
    form.select obj_symbol, options_for_select(options.collect { |s| [s[0].titleize, s[0]] }, selected: selected_value), {}, {:class => "dropdown"}
  end

  def nullable_bool_dropdown(form, obj_symbol, empty_value, selected_value)
    form.select(obj_symbol, options_for_select([["Yes", true], ["No", false]], selected: selected_value), {:include_blank => empty_value}, {:class => "dropdown"})
  end
end
这就是我目前的测试情况。。。只是不知道如何完成它

require "rails_helper"

describe FormHelper do
  describe "#dropdown" do
    it "returns dropdown html with class dropdown" do

      form = double("form_for")
      allow(form).to receive(:select) {nil}

      dropdown(form, :status, {"value1" => 0, "value2" => 1}, "1")

      expect(form).to receive(:select).with(:status)
    end
  end
end

基本上,对于dropdown函数,我想测试所有选项是否调用了titleize,所选值是否设置正确,以及dropdown类是否应用于select标记

关键是
期望(ActionView::Helpers::FormOptions Helper)的任何实例。接收(:options for_select)

您可以在此处阅读更多信息:

完整解决方案:

require 'rails_helper'

RSpec.describe FormHelper, :type => :helper do
  it 'titleizes the options and sets the class' do
    options = "<option />"

    expect_any_instance_of(ActionView::Helpers::FormOptionsHelper).to receive(:options_for_select).with([["Value1", "value1"]], {:selected => "1"}).and_return options

    form_for = double("form_for")
    expect(form_for).to receive(:select).with(:status, options, {}, {:class => "dropdown"})

    helper.dropdown(form_for, :status, {"value1" => 0}, "1")
  end
end
require'rails\u helper'
RSpec.descripe FormHelper,:type=>:helper do
它“标题化选项并设置类”do
选项=“”
期望(ActionView::Helpers::FormOptions Helper.)的任何\u实例\u接收(:options_for_select)。使用([[“Value1”,“Value1”]],{:selected=>“1”})和\u返回选项
格式为双(“格式为”)
期望(form_for).to receive(:select).with(:status,options,{},{class=>“dropdown”})
下拉列表(形式_表示,:状态,{“value1”=>0},“1”)
结束
结束