2017-05-09 5 views
0

체스 보드의 첫 번째 행 (x_position = 0)에서 수직으로 움직이는 Rook에 대한 유효한 이동을 테스트하기 위해 코드를 DRY 할 것입니다.Rook Chess Piece에 대한 내 RSPEC 테스트 수행 : Rook.valid_move?

여기 내 현재의 도전 과제입니다. 다음 코드 블록은 x_position (0)부터 시작하여 y_position (0..7)을 반복하고 마지막으로 각 x_poisition을 최대 7 번 반복합니다.

현재 사양 테스트 코드 :

require 'rails_helper' 

RSpec.describe Rook, type: :model do 
    describe "#valid_move?" do 
    it "returns true if move is valid vertically" do 
     game = FactoryGirl.create(:game) 
     rook = FactoryGirl.create(:rook, x_position: 0, y_position: 0, game: game) 
     (0..7).each {|i| (0..7).each {|j| expect(rook.valid_move?(i,j)).to eq(true)}} 
    end 

난 무엇 후이 코드는 FactoryGirl가 (0,0)에서 루크를 시작하는 대신에, (0,0)에서 루크를 시작 FatroyGirl 가지고 루프를 사용합니다 (y_position을 반복하는 것입니다 함께 1..7) 그런 다음 x_position을 1 씩 증가시키고 (7,7)이 테스트 될 때까지 y_position (1..7)을 다시 반복합니다. 그런 다음 (0,0)

당신이 보드에 모든 위치 (0,0)에서 이동하는 경우 테스트 I 더에 의해 해요

답변

0

은 전문가를 의미하지만, 당신은 위치에 조각을 만드는 것 같습니다 모든 위치가 유효해야한다고 주장합니다.

루프를 시작/끝 양식으로 풀고 몇 가지 인쇄 문을 입력하여 무슨 일이 일어나고 있는지 이해할 수 있습니다.

나는 당신이 더 원한다고 생각 :

(0..7).each {|i| rook.move_to(?,?) ; (i..7).each {|j| expect(rook.valid_move?(i,j)).to eq(true)}} 

을 그래서 기본적으로 당신은 두 단계로 일을하고 싶다. 첫 번째 위치를 루크로 설정 한 다음 다른 유효한 위치로 이동할 수 있는지 테스트합니다. 또한 잘못된 위치로 이동하려는 시도를 테스트 할 수도 있습니다.

+0

브리드 돈에게 감사합니다! 그것은 매우 유용합니다. 그것은 두려운 순간처럼 보이지만, 나는 행동 (방법)을 사용하여 시험 내에서 조각을 움직이는 것에 대해 생각해야한다는 것을 깨닫지 못했습니다. 지금은 훨씬 더 의미가 있습니다. – peterbehere