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