如何测试表单对象是否包含Form属性?

时间:2016-08-02 15:09:24

标签: ruby-on-rails ruby rspec reform

我有一个如下所示的表单对象:

class LeaderForm < UserForm
  feature Reform::Form::MultiParameterAttributes

  property :title
  property :gender
  property :phone_number
  property :date_of_birth, multi_params: true

  property :address, form: AddressForm # need to test this line

  validates :title, :gender, :phone_number, :date_of_birth, presence: true
end

如何编写功能规范来测试AddressForm是否存在?

我已经有一个工作规范来测试其他&#34;属性&#34; (标题,性别等)

我尝试过像

这样的事情
it 'must have the address form present' do
  expect(form.address).to include(AddressForm)
end

其输出为

  1) LeaderForm must have the address form present
       Failure/Error: expect(form.address).to include(AddressForm)

         expected #<AddressForm:0x007f89231c3280 @fields={"address1" => nil, "address2" => nil, "address3" => nil, "city" => ni...odel::Errors:0x007f89231c2b50 @base=#<AddressForm:0x007f89231c3280 ...>, @messages={}, @details={}>> to include AddressForm, but it does not respond to `include?`
         Diff:
         @@ -1,2 +1,41 @@
         -[AddressForm]
         +#<AddressForm:0x007f89231c3280
         + @_changes={},
         + @errors=
         +  #<Reform::Form::ActiveModel::Errors:0x007f89231c2b50
         +   @base=#<AddressForm:0x007f89231c3280 ...>,
         +   @details={},
         +   @messages={}>,
         + @fields=
         +  {"address1"=>nil,
         +   "address2"=>nil,
         +   "address3"=>nil,
         +   "city"=>nil,
         +   "postal_code"=>nil,
         +   "country"=>nil},

在我看来,它几乎就在那里,但并不完全。

我对RSpec一般都很新,很抱歉,如果我没有提供足够的信息。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找be_a

it 'must have the address form present' do
  expect(form.address).to be_a(AddressForm)
end

RSpec将一个以be_开头的未知匹配器(如be_foo)映射到类似is_foo?的方法。你也可以写(不太好)

it 'must have the address form present' do
  expect(form.address.is_a? AddressForm).to be true
end