Ruby|RSpec 메소드를 통한 테스트(블록 포함)

6779 단어 Ruby
여느 때처럼 "이거 누가 써요?"이런 단락.
얼마 지나지 않아 Rspec이 방법을 잘 불렀죠?나는 이런 시험을 쓸 수 있을 것이라고 생각한다.with를 사용하면 조준 파라미터의 값이 초과되었는지 확인할 수 있지만 블록이 있는 것은 어떻게 하는지 조사했기 때문에 그 노트입니다.
먼저 한 말은'&수속 대상'상황에서만 검증할 수 있다.

전기


검증에 사용되는 프로그램 사용 Deck 클래스입니다.이것은 카드를 씻을 수 있는 몇 장의 카드가 있는데, 짝수와 홀수를 분리할 수 있다.이번 검증은 Deck#split_even_numbersEnumerable#partition에 블록을 보내는 것으로 RSpec로 그걸 테스트하는 방법이다.
원래 호출 방법의 결과를 검증해야 하기 때문에 호출 방법만 테스트하는 것이 좋다고 말할 수 없다.사용량 준수는 형과의 약속입니다
class Deck
  def initialize(cards)
    @cards = cards
  end

  def shuffle
    @cards.shuffle
  end

  def split_even_numbers
    @cards.partition { |card| card.even? }
  end

  def split_odd_numbers
    @cards.partition(&:odd?)
  end
end

RSpec


블록 검증

with에 블록을 지정하면 받을 수 있을 것 같다{ |card| card.even? }.&block이기 때문에 Proc류의 대상이다.Proc 제작류의 대상을 비교하면 되는 건가!그렇게 생각했지만 주어진 방법의 네모난 블록과 달리 테스트가 순조롭게 진행되지 못했다
describe Deck do
  describe '#split_even_numbers' do
    let(:deck) { Deck.new(cards) }
    let(:cards) { [5, 4, 3, 2, 1] }

    it do
      expect(cards).to receive(:partition).with(no_args) do |&block|
        # この検証はうまくいかない
        expect(block).to eq(Proc.new{ |card| card.even? })
      end
      deck.split_even_numbers
    end
  end
end

& 프로세스 대상


'&수속 대상'이라지만 검증Proc류의 대상과 테스트 중 기대치가 같은 대상을 원한다면 이번에 하고 싶은 일을 할 수 있다.:odd?.to_proc는 항상 같은 대상을 되돌려주기 때문에 검증에서 기대하는 결과를 얻을 수 있다.
describe Deck do
  describe '#split_odd_numbers' do
    let(:deck) { Deck.new(cards) }
    let(:cards) { [5, 4, 3, 2, 1] }

    it do
      expect(cards).to receive(:partition).with(no_args) do |&block|
        expect(block).to eq(:odd?.to_proc)
      end
      deck.split_odd_numbers
    end
  end
end

좋은 웹페이지 즐겨찾기