干我的RSPEC测试一个白嘴鸦棋子:Rook.valid_move?

时间:2017-05-09 01:10:41

标签: ruby-on-rails ruby rspec factory-bot rspec-rails

我想要干掉我的代码,以便测试从国际象棋棋盘的第一行垂直移动的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

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

1 个答案:

答案 0 :(得分:0)

我绝不是专家,但看起来你正在创建位置(0,0)

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

我建议将循环展开到开始/结束表单并输入一些打印语句,以便您可以了解正在发生的事情。

我认为你想要更多:

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

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