मैं निम्नलिखित पर कुछ सलाह के लिए बहुत आभारी रहूंगा।

नीचे मेरे पास हमारे सेटअप के लिए एक सरलीकृत उदाहरण है।

मैंने अपने आरएसपीसी परीक्षण सूट पर कुछ हेल्पर मॉड्यूल परिभाषित किए हैं:

## spec/rails_helper.rb

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

RSpec.configure do |config|
  config.include ViewHelpers
end



### spec/support/view_helpers/base.rb

# frozen_string_literal: true

module ViewHelpers
  class Base
    # class content
  end
end



### spec/support/view_helpers/admins/payments/new.rb

# frozen_string_literal: true

module ViewHelpers
  module Admins
    module Payments
      class New < Base
        # class content
      end
    end
  end
end

इस सेटअप के साथ चश्मा पूरी तरह से स्थानीय रूप से चलता है; उप-वर्ग New उम्मीद के मुताबिक Base से विरासत में मिला है। हालांकि, जब ट्रैविस सीआई पर परीक्षण चल रहे होते हैं, तो हमें निम्न त्रुटि मिलती है:

NameError:
1433  uninitialized constant ViewHelpers::Admins::Payments::Base
1434# ./spec/support/view_helpers/admins/payments/new.rb:6:in `<module:Payments>'
1435# ./spec/support/view_helpers/admins/payments/new.rb:5:in `<module:Admins>'
1436# ./spec/support/view_helpers/admins/payments/new.rb:4:in `<module:ViewHelpers>'
1437# ./spec/support/view_helpers/admins/payments/new.rb:3:in `<top (required)>'
1438# ./spec/rails_helper.rb:34:in `block in <top (required)>'
1439# ./spec/rails_helper.rb:34:in `each'
1440# ./spec/rails_helper.rb:34:in `<top (required)>'
1441# ./spec/controllers/admins/billpayers_controller_spec.rb:3:in `<top (required)>'

मैंने स्पष्ट नेमस्पेसिंग के साथ इनहेरिट करने की भी कोशिश की है:

# frozen_string_literal: true

module ViewHelpers
  module Admins
    module Payments
      class New < ViewHelpers::Base
        # class content
      end
    end
  end
end

फिर से, यह सफलतापूर्वक स्थानीय रूप से चलता है लेकिन ट्रैविस सीआई त्रुटियाँ:

NameError:
1433  uninitialized constant ViewHelpers::Base
1434# ./spec/support/view_helpers/admins/payments/new.rb:6:in `<module:Payments>'
1435# ./spec/support/view_helpers/admins/payments/new.rb:5:in `<module:Admins>'
1436# ./spec/support/view_helpers/admins/payments/new.rb:4:in `<module:ViewHelpers>'
1437# ./spec/support/view_helpers/admins/payments/new.rb:3:in `<top (required)>'
1438# ./spec/rails_helper.rb:34:in `block in <top (required)>'
1439# ./spec/rails_helper.rb:34:in `each'
1440# ./spec/rails_helper.rb:34:in `<top (required)>'
1441# ./spec/controllers/admins/billpayers_controller_spec.rb:3:in `<top (required)>'

मैं इसके बजाय स्टम्प्ड हूं कि यह स्थानीय रूप से क्यों काम करता है लेकिन सीआई पर नहीं। किसी भी समर्थन और अंतर्दृष्टि के लिए बहुत आभारी होंगे।

धन्यवाद सामो

0
Sam J 14 फरवरी 2020, 18:00

2 जवाब

नमस्ते क्या आपने अपने ऑटोलैड कॉन्फ़िगरेशन को दोबारा जांच लिया है? (https://guides.rubyonrails.org/autoloading_and_reloading_constants.html)

आपके परिवेश कॉन्फिगर के आधार पर ऑटोलोड और कैशे क्लासेस को अलग-अलग तरीके से कॉन्फ़िगर किया जा सकता है:

├── config/environments
    ├── development.rb
    ├── production.rb
    └── test.rb
0
AndreDurao 14 फरवरी 2020, 18:19

यह के आदेश का पता चलता है

Dir[Rails.root.join("spec/support/**/*.rb")]

ओएस और फाइल सिस्टम पर निर्भर करता है।

इसका मतलब है कि सुपर-क्लास से पहले उप-वर्गों की आवश्यकता हो रही थी।

समाधान:

Dir[Rails.root.join("spec/support/**/*.rb")].sort
0
Sam J 14 फरवरी 2020, 19:24