2016-08-09 37 views
0

Ich habe die folgende Proxy-Klasse, die ich versuche, 100% Testabdeckung auf zu treffen. Egal, wie ich diesen Rspec-Test konstruiere, berichtet simplecov die klass_constructor Methode als nicht abgedeckt.Rspec Testabdeckung auf Initialisierer private Methode auf Proxy-Klasse

Wie würde ich diese Spezifikationen ändern, um sicherzustellen, dass das abgedeckt ist. Ich weiß, Initiatoren geben keine Werte zurück, d. H. Falsch oder wahr in den Rettungen, aber seltsame Ereignisse passieren mit diesen Rspec-Stubs.

Proxy-Klasse-Code

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 

inklusive Einstellungen Modul

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 

Spec

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 

Antwort

0

Dies gilt nicht lösen Sie das Problem, aber

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

ist sauberer.

+0

tatsächlich nach dem Ausführen der Berichte scheint es sowohl das Problem zu lösen und auf 100% –

+0

nach weiterer Überprüfung und erneute Ausführung von Simplecov zu aktualisieren es zeigt immer noch die 'class_constructor' als nicht abgedeckt. Gedanken? –

+0

das kam wieder auf :( –