동일한 작업을 두 번하지 못하도록 테스트를 작성하려고합니다 (이 경우 tictactoe에서 동일한 사각형을 두 번 재생). RSpec 구문 나를 혼란스럽게하고 그들의 문서에서 해결책을 볼 수 없습니다. 성공하지 못했던 몇 가지 접근법을 시도해 보았습니다. RSpec 구문을 이해할 수 없다는 것을 깨닫게했습니다.RSpec은 어떻게 여러 호출에 대해 예기치 않은 결과를내는 것을 허용하고 기대합니까?
테스트가 재귀 메서드이므로 많은 오류가 프로그램에서 충돌을 일으켜 문제를 격리하기가 어렵 기 때문에 내가 원하는만큼 많은 설명이되지 않습니다.
나는 처음에이 같은 모양 생성/테스트하기 위해 노력하고있어 방법은 아무튼 경우
데프
(play_on 반환 nil을 끝
your_turn unless play_on(square_at(get_row, get_square))
your_turn 마커를 성공적으로 배치하지 마십시오)
이 경우 저는 testi입니다. your_turn, get_row 및 get_square는 해당 모듈의 메서드이지만 play_on 및 square_at는 클래스가 통합되는 클래스의 메서드이므로 필요한 부분을 스터 빙하고 있습니다. RSpec에 의해 프롬프트가 나타납니다). 할
allow(human).to receive(:play_on).and_return(nil, :square)
expect(human).to receive(:your_turn).twice
human.your_turn
끝
는 '플레이어가 그 광장에 재생할 수없는 경우 과정을 반복': I 시도
첫 번째 시험이 있었다 시험은 실패하고 한 번만 받았다고합니다. 이것이 전개 될 것으로 예상되는 방식은 초기의 your_turn 호출에 있었고, RSpec은 play_on을 스텁하고, nil을 반환하고, unless 문을 설정하고 your_turn 호출을 반복했습니다. 그 후에 심볼을 반환하고 이후의 재귀를 방지합니다. 나는 무엇을 잘못 이해 했는가? , .and_return (1
는 노력으로, 나는 일을 보인다 괴물 함께했다, 그러나 나는 이유를 완전히 확실하지 않다 : (get_row를)
이이 (인간)를 수신 .TO 수 get_square) .and_return (2,2)
(인간) (수신 .TO 수 : 2)가
가 (인간) (수신 .TO 허용 square_at)를 .with (1, 2) .and_return (: nil)
(인간 : square_at) .with (2, 2) .and_return (: square)
는 (인간)를 수신 .TO 수 (: play_on() : 사각형) .and_return .with (: 사각형)을(인간)를 수신 .TO 기대 (: play_on를)
인간 .twice.your_turn 여기
의 문제점 내가 이해보다는 무력을 통해 더 많은 일을하는 데, 나는 확실하지 않다 몇 가지있을 것입니다 (이 못생긴 것보다 다른) :
- 왜 예를 들어 RSpec으로 돌아 오는 프롬프트없이 처음 두 줄을 제거 할 수 있습니까? 세 번째와 네 번째 줄에서 get_ 메소드를 호출하는 square_at 메소드를 스터 빙하고 있기 때문에 왜 여전히 호출되는 것입니까?
- 마찬가지로 다섯 번째 줄의 세 번째 줄과 네 번째 줄은 세 번째와 네 번째 줄을 가리키는 것처럼 보였지만 처음에는 마지막으로 '허용'반환 (nil, : square)을 사용하여 작동하도록했습니다. 그건 네 전화가 네 번을 기대하고 있던 세 번 전화 했어. 그래서 나는 그걸 없애 버렸다. play_on은 반환하지 않고 즉각적으로 사각형을 반환하므로 until 논리가 트리거되지 않고 메서드가 종료됩니다. 다시, 나는 무엇을 잘못 이해 했는가?
- 2 개의 'square_at'허용 라인을 다루는 드라이어가 있습니까?
모두 감사합니다,
사샤
첫 번째 테스트 (실패한 테스트)에서는 ... (인간) .to (any_args())를 수신 (play_on)하고 and_return (nil, : square) – SteveTurczyn
미안 해요, 조기 반환 키 ... – SteveTurczyn
작동하지 않습니다 - 그것은 여전히 세 번에 인수를 모두 호출하므로 두 번 프롬프트가 표시되고 결국 # ' –
Arepo