2017-05-09 4 views
0

ROOKがチェスボードの最初の行(x_position = 0)から垂直方向に移動するための有効な移動をテストするためにコードをDRYしたいと思っています。Rook Chess Pieceに対するRSPECテストのDRYing: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)で作品を作成しているように見える

答えて

0

すべての場所が有効であると主張する。

私はループをbegin/end形式にアンラッピングし、何が起こっているのかを理解できるようにいくつかのprint文を入れることをお勧めします。

私はあなたの多くをしたいと思う:

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

だから、基本的に次の2つの段階で物事をやりたいです。最初にルーキーをある場所に設定し、次にそれが他の有効な場所に移動できるかどうかをテストします。また、無効な場所に移動しようと試みる可能性もあります。

+0

ありがとうBrendon!それは非常に便利です。それはちょっとした瞬間のように思えるが、私は動作(方法)を使って私のテスト内でピースを動かすことを考えるべきであるとは思っていなかった。今はもっと意味をなさない。 – peterbehere