Ruby 正在运行RSpec测试的函数中获取Nil值。。。?

Ruby 正在运行RSpec测试的函数中获取Nil值。。。?,ruby,rspec,Ruby,Rspec,有人能帮个新手吗? 我正在运行以下两个测试,试图最终获得相同的值。然而当我通过计算机旋转方法运行测试时,它会给我一个nil值,但是当我直接通过player\u first\u turn函数运行测试时?它返回我要查找的:b2的值。为什么前者不也给我:b2 RSPEC测试 before(:all) do @test_case = ComputerLogic.new $user_sign = "X" $computer_name = "Watson" $computer_sign =

有人能帮个新手吗? 我正在运行以下两个测试,试图最终获得相同的值。然而当我通过计算机旋转方法运行测试时,它会给我一个nil值,但是当我直接通过player\u first\u turn函数运行测试时?它返回我要查找的:b2的值。为什么前者不也给我:b2

RSPEC测试

before(:all) do
  @test_case = ComputerLogic.new
  $user_sign = "X"
  $computer_name = "Watson"
  $computer_sign = "O"
end

context "pertaining to computer_turn" do
  it "should: if player picks corner then computer picks center" do
    possible_places = {a1: "X",a2: @a2,a3: @a3,b1: @b1,b2: @b2,b3: @b3,c1: @c1,c2: @c2,c3: @c3}

    @test_case.computer_turn(possible_places).should == :b2
  end
end

context "pertaining to player_first_turn? and computer_first_move" do
  it "should: if player picks corner then computer picks center" do
    possible_places = {a1: "X",a2: @a2,a3: @a3,b1: @b1,b2: @b2,b3: @b3,c1: @c1,c2: @c2,c3: @c3}

    @test_case.player_first_turn?(possible_places).should == :b2
  end
我正在运行RSPEC测试的函数

def computer_turn(possible_places)
  if player_first_turn?(possible_places)
  elsif attack
  elsif counter_attack
  elsif fork_play?
  else random_move
  end
end

def player_first_turn?(possible_places)
  @first_turn = possible_places.select { |key, value| value == $user_sign }
  if @first_turn.length == 1
    return computer_first_move
  else
    return false
  end
end

def computer_first_move
  check_center = @first_turn.keys.first
  if check_center == :b2
    move = { a1: @a1,a3: @a3, c1: @c1,c3: @c3 }.keys.sample
    #return declare_computer_move(move)
  else
    move = :b2
    #return declare_computer_move(move)
  end
end
问题是,如果玩家第一次旋转,计算机旋转返回nil?可能的位置是真实的,因为if表达式和下面的elsif之间没有代码。事实上,如果任何条件表达式都是真实的,则computer\u move将返回nil,否则它将返回random\u move


if语句从不返回它正在计算的条件的值。它返回条件表达式后面的语句系列或表达式的值,如果为空,则返回nil。是否混淆了函数名?计算机第一步似乎是返回:b2,但你的问题和测试都希望计算机第一步返回:b2,这还不清楚。不,两种方式都从计算机第一步和玩家第一步级联到计算机第一步。你希望计算机第一步返回哪一行:b2?我想你回答了我的问题;非常感谢。我想你是说如果玩家第一次转身?可能的位置,返回计算机第一次移动。我不是在暗示,但我很高兴这些问题有帮助: