0

私はこのモデルを持っています:

class Proceeding < ActiveRecord::Base
  attr_accessible :archive_id, :assets, :kind
  validates_presence_of :archive_id, :kind
  validates_format_of :kind, :with => /^(deroga|progetto)$/
  validate :assets_list_must_be_valid_or_empty

  def assets_list
    self.assets.split.map!{|a| a.upcase.strip}
  end

  private
  def assets_list_must_be_valid_or_empty
    if self.assets
      al = self.assets_list
      if Asset.find_all_by_name(al).size < al.size
        errors.add(:assets, "list is not valid")
      end
    end
  end
end

そしてこの仕様:

require 'spec_helper'
describe Proceeding do
  before :each do
    @proceeding = Proceeding.new( archive_id: "test", kind: "progetto", assets: "")
  end

  it "is valid" do
    expect(@proceeding).to be_valid   #S1
  end

  it "single is valid" do
    @proceeding.assets = " 1.1.c  "
    expect(@proceeding).to be_valid   #S2
  end

  it "multiple is valid" do
    @proceeding.assets = " 1.1.c  80.1.a 2.1.B 4.1.b  "
    expect(@proceeding).to be_valid   #S3
  end
end

S1 は機能します。S2 と S3 は機能しません。

Failures:

1) Proceeding asset multiple is valid
   Failure/Error: expect(@proceeding).to be_valid
   expected #<Proceeding id: nil, kind: "progetto", archive_id: "test", assets: "     
   1.1.c  80.1.a 2.1.B 4.1.b  ", created_at: nil, updated_at: nil> to be valid, but 
   got errors: Assets list is not valid # ./spec/models/proceeding_spec.rb:62:in 
   `block (3 levels) in <top (required)>'

2) Proceeding asset single is valid
   Failure/Error: expect(@proceeding).to be_valid
   expected #<Proceeding id: nil, kind: "progetto", archive_id: "test", assets: "  
   1.1.c  ", created_at: nil, updated_at: nil> to be valid, but got errors: Assets 
   list is not valid # ./spec/models/proceeding_spec.rb:57:in `block (3 levels) in 
   <top (required)>'

rspec ./spec/models/proceeding_spec.rb:60 # Proceeding asset multiple is valid
rspec ./spec/models/proceeding_spec.rb:55 # Proceeding asset single is valid

ただし、2 つの例はコンソールと http で機能します。ヘルパーの定義済みバリデーターに基づく仕様はすべて機能します。

これらの仕様を修正するにはどうすればよいですか?

ありがとう

4

1 に答える 1