如何测试ruby的初始化方法,该方法又调用私有方法

问题描述 投票:0回答:1
# frozen_string_literal: true

require 'yaml'
require 'singleton'
require 'pry'

module Plugin
  module Rules
    class RulesLoader
      include Singleton

      attr_reader :definitions

      def initialize
        @definitions = load #it is calling the private method and loads the definitions
      end

      def fetch_rule_definition_for(key)
        definitions[key]
      end

      private
      def load
        #Other code
        Hash = {}
        #this method returns the hash after processing
      end
    end
  end
end

如何编写此类的规范,其中initialize方法调用私有方法并加载实例变量。由于load方法是私有方法,因此我不会直接调用。

ruby rspec rspec-rails
1个回答
0
投票

我建议记住些重写。

module Plugin
  module Rules
    class RulesLoader
      include Singleton

      def fetch_rule_definition_for(key)
        @definitions ||= load_definitions
        @definitions[key]
      end

      private

      def load_definitions
        #Other code
        hash = {}
        #this method returns the hash after processing
      end
    end
  end
end

一个假设的规格:

describe Plugin::Rules::RulesLoader do
  context '#fetch_rule_definition_for' do
    subject(:fetch_rule_definition) { described_class.instance.fetch_rule_definition_for(key) }

    context 'with valid key' do
      let(:key) { :valid_key }

      it 'returns definitions' do
        expect(fetch_rule_definition).to eq(#YOUR_VALUE_HERE#)
      end
    end

    context 'with invalid key' do
      let(:key) { :invalid_key }

      it 'returns nil' do
        expect(fetch_rule_definition).to be_nil
      end
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.