Rails をロードせずにテストを実行するようにリファクタリングするプロセスを開始しています。私のテストのほとんどは、レールをロードする標準の rspec テストです。私の問題は、以下のテスト ファイルで、他の多くのテスト ファイルで使用されている 1 つのクラスをオーバーライドしていることです。したがって、これらのテストに合格しても、他のテストは失敗します。ここで多くのアドバイスを得た後、その Project クラスをスタブ化することを検討しています。(プロジェクト クラスを必要とする他のすべてのテスト ファイルでプロジェクト クラスをリロードするよりも、このファイルでプロジェクト クラスをスタブしたいと思います。)
これが私が今持っているものです。
require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
require 'active_support/core_ext/string' #used for '.blank?' method
class Project
attr_accessor :general_media
def initialize(attributes = {})
@general_media = attributes[:general_media]
end
include ActiveModel::Validations
include ActiveRecord::Callbacks
end
require_relative '../../../app/models/project/media.rb'
describe 'Project::Media' do
#then all the tests
FakeProject クラスを作成し、Project::Media を FakeProject でスタブ化して Project::Media に継承させようとしましたが、うまくいきませんでした。これが私が持っているものです。
require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
require 'active_support/core_ext/string' #used for '.blank?' method
class FakeProject
attr_accessor :general_media
def initialize(attributes = {})
@general_media = attributes[:general_media]
end
include ActiveModel::Validations
include ActiveRecord::Callbacks
end
class Project; end
require_relative '../../../app/models/project/media.rb'
describe 'Project::Media' do
before(:all) { stub_constant!("Project", FakeProject) }
まず、私はまだプロジェクト クラスをオーバーライドしています。次に、stubbig が機能していません。検証が機能していないというエラーが引き続き表示されます。
undefined method `validate' for Project::Media:Class (NoMethodError)
助言がありますか?私の目標は、Project クラスがすべてのテストに対してどのように動作するかをオーバーライドするのではなく、この media_spec.rb テスト ファイル内のテストに対してのみ Project クラスをスタブ化することです。