Rspe c проваленный тест, где 'Diff:', выглядит идентично - PullRequest
0 голосов
/ 29 января 2020

Цель

Моя программа использует алгоритм построчно, в виде массива, для построения доски.

Окончательный массив выглядит следующим образом ( стандартная доска 3х3 с рамкой):

[['-----'],['|...|'],['|...|'],['|...|'],['-----']]

Проблема

Проверка на сбой выглядит следующим образом:

Примечание: 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:`

Что бы отличалось?

Я не уверен, что где-то пропущен пробел, если я изменю окончательный массив на "-----\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

1 Ответ

2 голосов
/ 29 января 2020

Из документов puts:

puts(obj, ...) → nil Записывает данный объект (ы) в ios. Записывает новую строку после любой, которая еще не заканчивается последовательностью новой строки. [...]

Это означает, что когда ваш вызов puts ['foo', 'bar'], тогда Ruby фактически выдаст "foo\nbar"

Чтобы заставить ваш spe c pass изменить ожидание на :

expect { board.view_board }.to output("-----\n|...|\n|...|\n|...|\n-----\n").to_stdout
...