>source

다음과 같은 루비 모듈이 있습니다.

module SomeModule
  module Account
    def self.account_info
      raise NotImplementedError
    end
  end
end

그리고 이것은 내 테스트입니다.

 describe ExchangeClientWrapper::Account do
    let(:mock_class) do
      class MockClass
        extend SomeModule::Account
      end
    end
    describe ".account_info" do
      it "raises a NotImplementedError" do
        expect { mock_class.account_info }.to raise_error(NotImplementedError)
      end
    end
  end
end

이 오류가 발생합니다.

expected NotImplementedError, got #<NoMethodError: undefined method `account_info' for MockClass:Class> with backtrace:

무슨 일이야?

작동하지 않습니까?

module A
    module B
      def self.d
        puts "hi there"
      end
    end
end
class C
    extend A::B
end
C.d

그러나 이것이 작동하는 것처럼 보입니다.

module A
    module B
      def self.d
        puts "hi there"
      end
    end
end
class C
    include A
end
C::B.d

  • 답변 # 1

    이 기사에서 include, extend 및 prepend를 설명하는 참조를 읽으면 extends 이미 Singleton 클래스와 함께 작동하므로 self 불필요합니다.

    이 코드로 작은 테스트를 수행했습니다. self 정의에서

    module SomeModule
      module Account
        def account_info
          raise NotImplementedError
        end
      end
    end
    class MockClass
      extend SomeModule::Account
    end
    MockClass.account_info
    
    

    그리고 NotImplementedError가 발생합니다.

관련 자료

  • 이전 ios - 신속하게 푸시 알림의 제목이나 본문을 읽는 방법은 무엇입니까?
  • 다음 vue.js - django 앱의 vue - 정적 js 파일에서 vue 인스턴스를 설정하는 방법