干燥我的 RSPEC 测试车棋子:Rook.valid_move?

DRYing my RSPEC Test for a Rook Chess Piece: Rook.valid_move?

我正在尝试整理我的代码,以便测试从棋盘第一行垂直移动的 Rook 的有效移动 (x_position = 0)。

这是我目前的大脑弯曲挑战。以下代码块循环遍历棋盘上从 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

我使用此代码的目的是,使用循环让 FatroyGirl 在 (0,0) 开始车并迭代 y_position(1..7) 然后将 x_position 递增 1 并再次迭代 y_position(1..7) 直到 (7,7) 被测试。

我不是专家,但看起来你是在位置 (0,0) 创作作品

然后测试是否从 (0,0) 移动到板上的每个位置并断言所有位置都应该有效。

我建议将循环展开为 begin/end 形式并放入一些打印语句,以便您了解发生了什么。

我想你想要更多:

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

所以基本上你想分两个阶段做事。首先将车设置到一个位置,然后测试它是否可以移动到其他有效位置。也可能测试移动到无效位置的尝试。