1

Rails アプリ全体をロードせずにモデルをテストしようとしています。私がテストしているクラスに関連するレールの部分だけを含めたいです。active_model/validations を正しく要求するにはどうすればよいですか? 私はそれを正しくやったと思っていましたが、以下のセットアップはこのエラーをスローします:

undefined method `validate' for Project::Media:Class (NoMethodError)

テスト中のモデル:

#app/models/project/media.rb

class Project::Media < Project  #Project inherits from ActiveRecord::Base

  validate :allowable_media_source

  before_save : classify_link

  #next, all the methods

end

仕様:

#spec/models/project/media_spec.rb

class ActiveRecord
  class Base; end
end

class Project; end

require_relative '../../../app/models/project/media.rb'
require 'active_model/validations'

describe Project::Media do
  #then tests 
end
4

2 に答える 2

1

(あなたのテストではProject)から継承しActiveRecord::Baseていないため、テストが機能していないため、メソッドがありませんvalidate。ActiveModel 検証を要求すると、ActiveModelモジュールが使用可能になります。実際にクラスに含めて、次のようにメソッドを使用可能にする必要があります。

class Project
  include ActiveModel::Validations
end

ActiveModel を単独で使用する方法の詳細については、この記事を参照してください。

その他の参考文献:

于 2013-01-28T22:07:04.590 に答える
0

塩山の投稿によると、必要なものを要求する必要がありました。これは、それがどのように見えたかです。

require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
class Project
  include ActiveModel::Validations    
  include ActiveRecord::Callbacks
end

require_relative '../../../app/models/project/media.rb'

#then tests
于 2013-01-29T02:14:07.703 に答える