2016-08-09 3 views
0

次のプロキシクラスを使用して、100%テストカバレッジを取得しようとしています。このRspecテストをどのように構築しても、シンプルコフはklass_constructorメソッドを報告していません。プロキシクラスのイニシャライザプライベートメソッドのRspecテストカバレッジ

これらの仕様を変更して、どのようにカバーするのかを確認します。イニシャライザが値を返さないことはわかっています。つまり、レスキューではfalseまたはtrueですが、これらのRspecスタブでは異常なイベントが発生します。

プロキシクラスコード

class IntegrationProvider 
    include IntegrationError 
    include IntegrationSettings 

    def initialize(provider) 
    @provider = provider 
    return false unless valid_provider?(@provider) 
    return false unless valid_klass_constructor? 
    klass_constructor 
    end 

    def proxy_to 
    @provider_klass 
    end 

    private 

    def klass_constructor 
    @provider_klass = "#{@provider.capitalize}::#{@provider.capitalize}Provider".safe_constantize 
    end 
end 

含まセッティングモジュール

module IntegrationSettings 
    def valid_provider?(provider) 
    supported_providers.include?(provider) 
    end 

    def valid_klass_constructor? 
    klass_constructor 
    end 

    private 

    def supported_providers 
    Rails.cache.fetch('supported_providers', expires_in: 10.days) do 
     Provider.where(active: true).pluck(:slug) 
    end 
    end 
end 

スペック

RSpec.describe IntegrationProvider, type: :integration do 
    let!(:provider) { FactoryGirl.create(:provider, :active) } 
    let!(:klass) { Provider } 

    describe '#initialize' do 
    it 'initializes' do 
     stub_const("#{provider.slug.capitalize}::#{provider.slug.capitalize}Provider", klass) 
     expect(IntegrationProvider.new(provider.slug)).to be_truthy 
    end 
    end 

    describe '#proxy_to' do 
    subject { described_class.new(provider.slug) } 

    it 'is a proxy' do 
     subject.instance_variable_set(:@provider_klass, klass) 
     expect(subject.proxy_to).to eq(klass) 
    end 

    it 'inherits active record' do 
     subject.instance_variable_set(:@provider_klass, klass) 
     expect(subject.proxy_to.ancestors.include?(ActiveRecord::Base)).to be_truthy 
    end 
    end 

    describe '#klass_constructor' do 
    subject { described_class.new(provider.slug) } 

    it 'true' do 
     stub_const("#{provider.slug.capitalize}::#{provider.slug.capitalize}Provider", klass) 
     expect(subject.send(:klass_constructor)).to be_truthy 
    end 

    it 'assignment' do 
     stub_const("#{provider.slug.capitalize}::#{provider.slug.capitalize}Provider", klass) 
     subject.send(:klass_constructor) 
     expect(subject.instance_variable_get(:@provider_klass)).to eq(klass) 
    end 
    end 
end 

答えて

0

これはしていません

"#{@provider.capitalize}::Events::#{@provider.capitalize}Queue".safe_constantize 

がきれいです。

+0

実際に報告書を実行した後、simplecovを再検討して再実行した後、問題を解決して100% –

+0

に更新されたように見えますが、まだカバーされていない 'klass_constructor'が表示されます。思考? –

+0

このポップアップバックアップ:( –

関連する問題