복붙노트

[RUBY-ON-RAILS] 개인 방법을 투기하는 방법

RUBY-ON-RAILS

개인 방법을 투기하는 방법

내가 RSpec에와 투기하고 싶은 개인 방법과 모델을 가지고 당신은 보통 어떻게해야합니까? 당신은 단지 개인 하나를 호출하는 방법을 테스트합니까? 나 또한 개인을 투기? 그렇다면, 당신은 어떻게해야합니까?

해결법

  1. ==============================

    1.난 항상이 방법을 : 나는 공개 API를 내 수업이 노출을 테스트 할 수 있습니다.

    난 항상이 방법을 : 나는 공개 API를 내 수업이 노출을 테스트 할 수 있습니다.

    당신이 개인 방법이있는 경우, 당신은 당신이 다른 클래스에 노출 public 메소드에서 호출. 모든 조건에서 예상대로 그 공개 방법이 작동하는지 테스트하는 경우 따라서, 당신은 또한 민간 방법은 그들이 아니라 일을 사용하는 것이 입증했다.

    나는 어떤 특히 복잡한 개인 방법 건너 한 것을 인정한다. 당신이 그들을 테스트 할 것을 극단적 인 경우에, 당신은이 작업을 수행 할 수 있습니다 :

    @obj.send(:private_method)
    
  2. ==============================

    2.필요 코드 커버리지 (일시적 또는 영구적), 일시적으로 RSpec에-상황에 개인 보석을 사용하는 것이 민간 메소드의 컨텍스트 내에서 개인 방법을 공개합니다.

    필요 코드 커버리지 (일시적 또는 영구적), 일시적으로 RSpec에-상황에 개인 보석을 사용하는 것이 민간 메소드의 컨텍스트 내에서 개인 방법을 공개합니다.

    gem 'rspec-context-private'
    

    그것은 당신의 프로젝트에 공유 컨텍스트를 추가하여 사용할 수 있습니다.

    RSpec.shared_context 'private', private: true do
    
      before :all do
        described_class.class_eval do
          @original_private_instance_methods = private_instance_methods
          public *@original_private_instance_methods
        end
      end
    
      after :all do
        described_class.class_eval do
          private *@original_private_instance_methods
        end
      end
    
    end
    

    그런 다음 전달하는 경우 : 메타 데이터 등을 개인이 블록을 설명, 민간 방법은 컨텍스트 내에서 공개됩니다.

    class Example
      private def foo
        'bar'
      end
    end
    
    describe Example, :private do
      it 'can test private methods' do
        expect(subject.foo).not eq 'bar'
      end
    end
    
  3. ==============================

    3.당신이 개인 방법에 기대를 테스트하고자하는 경우, 허용 대답은 정말 일 (나는 그 시점에 정정에 열려있어, 그래서 적어도 내가 알고하지 않는 것이)됩니다. 내가 대신했던 심지어 filthier입니다 - 테스트 자체, 그냥 재정의하는 방법을 노출 :

    당신이 개인 방법에 기대를 테스트하고자하는 경우, 허용 대답은 정말 일 (나는 그 시점에 정정에 열려있어, 그래서 적어도 내가 알고하지 않는 것이)됩니다. 내가 대신했던 심지어 filthier입니다 - 테스트 자체, 그냥 재정의하는 방법을 노출 :

    def object_to_test.my_private_method
      super
    end
    

    루비 1.8에 작품 새로운 런타임의에 대해 언급 할 수 없다.

  4. from https://stackoverflow.com/questions/4154409/how-to-spec-a-private-method by cc-by-sa and MIT license