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
tatsächlich nach dem Ausführen der Berichte scheint es sowohl das Problem zu lösen und auf 100% –
nach weiterer Überprüfung und erneute Ausführung von Simplecov zu aktualisieren es zeigt immer noch die 'class_constructor' als nicht abgedeckt. Gedanken? –
das kam wieder auf :( –