Rspec 测试失败 'Diff:',看起来一模一样
Rspec failing test where 'Diff:', looks identical
瞄准
我的程序使用一种算法在数组的数组中逐行制作电路板。
最终数组如下所示(带边框的标准 3x3 板):
[['-----'],['|...|'],['|...|'],['|...|'],['-----']]
问题
失败测试如下:
注意:view_board
把@board
expect { board.view_board }.to output(['-----','|...|','|...|','|...|','-----']).to_stdout
输出:
`Failure/Error: expect { board.view_board }.to output(['-----','|...|','|...|','|...|','-----']).to_stdout
expected block to output ["-----", "|...|", "|...|", "|...|", "-----"] to stdout, but output "-----\n|...|\n|...|\n|...|\n-----\n"
Diff:`
有什么不同?
我不确定是否遗漏了 space,如果我将最终数组更改为 "-----\n"
,那么我会得到:
Diff:
@@ -2,5 +2,5 @@
|...|
|...|
|...|
------\n
+-----
编辑:
棋盘生成代码
class Board
BOARD_ROW = '-'
BOARD_COLUMM = '|'
BEGINNING_AND_END_LENGTH = 2
def initialize(board_size = 3)
@board = []
@board_top_and_bottom = []
@board_middle = []
@board_size = board_size
end
def go
set_board
end
def set_board
set_board_top_and_bottom
set_board_middle
assemble_board
view_board
end
def set_board_top_and_bottom
(@board_size + BEGINNING_AND_END_LENGTH).times do
@board_top_and_bottom.push(BOARD_ROW)
end
@board_top_and_bottom = [@board_top_and_bottom.join]
end
def set_board_middle
add_board_edge
add_board_spaces
add_board_edge
@board_middle = [@board_middle.join]
end
def add_board_spaces
@board_size.times do
@board_middle.push('.')
end
end
def add_board_edge
@board_middle << BOARD_COLUMM
end
def assemble_board
@board << @board_top_and_bottom
@board_size.times do
@board << @board_middle
end
@board << @board_top_and_bottom
end
def view_board
puts @board
end
end
来自 puts
的文档:
puts(obj, ...) → nil
Writes the given object(s) to ios. Writes a newline after any that do not already end with a newline sequence. [...]
这意味着当你调用 puts ['foo', 'bar']
然后 Ruby 实际上会输出 "foo\nbar"
为了使您的规范通过,将期望更改为:
expect { board.view_board }.to output("-----\n|...|\n|...|\n|...|\n-----\n").to_stdout
瞄准
我的程序使用一种算法在数组的数组中逐行制作电路板。
最终数组如下所示(带边框的标准 3x3 板):
[['-----'],['|...|'],['|...|'],['|...|'],['-----']]
问题
失败测试如下:
注意:view_board
把@board
expect { board.view_board }.to output(['-----','|...|','|...|','|...|','-----']).to_stdout
输出:
`Failure/Error: expect { board.view_board }.to output(['-----','|...|','|...|','|...|','-----']).to_stdout
expected block to output ["-----", "|...|", "|...|", "|...|", "-----"] to stdout, but output "-----\n|...|\n|...|\n|...|\n-----\n"
Diff:`
有什么不同?
我不确定是否遗漏了 space,如果我将最终数组更改为 "-----\n"
,那么我会得到:
Diff:
@@ -2,5 +2,5 @@
|...|
|...|
|...|
------\n
+-----
编辑:
棋盘生成代码
class Board
BOARD_ROW = '-'
BOARD_COLUMM = '|'
BEGINNING_AND_END_LENGTH = 2
def initialize(board_size = 3)
@board = []
@board_top_and_bottom = []
@board_middle = []
@board_size = board_size
end
def go
set_board
end
def set_board
set_board_top_and_bottom
set_board_middle
assemble_board
view_board
end
def set_board_top_and_bottom
(@board_size + BEGINNING_AND_END_LENGTH).times do
@board_top_and_bottom.push(BOARD_ROW)
end
@board_top_and_bottom = [@board_top_and_bottom.join]
end
def set_board_middle
add_board_edge
add_board_spaces
add_board_edge
@board_middle = [@board_middle.join]
end
def add_board_spaces
@board_size.times do
@board_middle.push('.')
end
end
def add_board_edge
@board_middle << BOARD_COLUMM
end
def assemble_board
@board << @board_top_and_bottom
@board_size.times do
@board << @board_middle
end
@board << @board_top_and_bottom
end
def view_board
puts @board
end
end
来自 puts
的文档:
puts(obj, ...) → nil
Writes the given object(s) to ios. Writes a newline after any that do not already end with a newline sequence. [...]
这意味着当你调用 puts ['foo', 'bar']
然后 Ruby 实际上会输出 "foo\nbar"
为了使您的规范通过,将期望更改为:
expect { board.view_board }.to output("-----\n|...|\n|...|\n|...|\n-----\n").to_stdout