Ruby RSPEC调用方法错误
下面是给出错误/错误的方法:Ruby RSPEC调用方法错误,ruby,methods,rspec,tdd,call,Ruby,Methods,Rspec,Tdd,Call,下面是给出错误/错误的方法: def draw?(board) if full?(board) == true && won?(board) == false return true else return false end end 该方法完成了应该执行的所有操作,但这是我运行rspec文件时出现的错误: 1) ./lib/tic_tac_toe.rb #draw? calls won? and full?
def draw?(board)
if full?(board) == true && won?(board) == false
return true
else
return false
end
end
该方法完成了应该执行的所有操作,但这是我运行rspec文件时出现的错误:
1) ./lib/tic_tac_toe.rb #draw? calls won? and full?
Failure/Error: expect(self).to receive(:won?).with(board)
(#<RSpec::ExampleGroups::LibTicTacToeRb::Draw:0x00000002e300b0>).won?(["X", "O", "X", "O", "X", "X", "O", "X", "O"])
expected: 1 time with arguments: (["X", "O", "X", "O", "X", "X", "O", "X", "O"])
received: 0 times
基本上,我读到:画画?没有打满电话?赢了
但是当我看我的画的时候?方法,我叫他们!好像有条件的
那么我错在哪里呢
非常感谢您的帮助
我目前正在学习Ruby。1你的全部绘画作品?方法可以简化为一行:全板&!韩元?董事会
2如果您正在测试类方法,您需要监视类的实例或类本身。您使用的是self,它将是RSpec本身,而不是您正在测试的底层类。既然我不知道它的名字,我就假设它叫游戏。试着这样做:
describe '#draw?' do
it 'calls draw? and full?' do
board = ["X", "O", "X", "O", "X", "X", "O", "X", "O"]
game = Game.new
expect(game).to receive(:won?).with(board)
expect(game).to receive(:full?).with(board)
game.draw?
end
end
3这里的另一个问题是,您希望两个方法都被调用,但都赢了?满了就不叫了?返回false。这是由于。在所有语句都必须求值为真或假的情况下,一旦其中一个语句不求值,其余语句将不求值。想一想这样的例子:if user!=nil&&user.admin?。您需要在这里短路,以便在第一个语句不为真时不会对第二个语句求值。一般来说,评估输出无关紧要的语句是不必要的资源使用
4最后,一般来说,最好是测试函数的输出,而不是测试函数的内部工作方式。最好进行一系列测试,在这些测试中传递数据,然后期望结果。我忘记了短路,谢谢!这是我正在学习的在线课程的一部分,我不应该接触测试,但是测试函数的输出确实更有意义!Rspec仍然为我为一个tic-tac-toe游戏所做的整体CLI抛出错误,尽管它工作得很好。所以我继续前进。非常感谢您的信息!
describe '#draw?' do
it 'calls draw? and full?' do
board = ["X", "O", "X", "O", "X", "X", "O", "X", "O"]
game = Game.new
expect(game).to receive(:won?).with(board)
expect(game).to receive(:full?).with(board)
game.draw?
end
end