2009-10-02 4 views
1

У меня есть тест в RSpec, который сравнивается с длинными текстовыми строками. Когда тест не пройден, я получаю сообщение, как это:Как автотест и RSpec хорошо отформатированы при сравнении длинных текстов (с t и n)?

'jobs partial should render the correct format for jobs' FAILED 
expected: "Job {\n\tName = \"name1-etc\"\n\tType = Backup\n\tMessages = Daemon\n\tPool = Default 
\n\tSchedule = \"schedule1\"\n\tStorage = storage1\n\tClient = \"name1\"\n\tFileset = \"fileset1 
\"\n\tMax Wait Time = 5m\n\tWrite Bootstrap = \"/var/lib/bacula/name1-etc.bsr\"\n}\n\n", 
    got: "Job {\n\tName = \"name1-etc\"\n\tType = Backup\n\tMessages = Daemon\n\tPool = Default 
\n\tSchedule = \"schedule1\"\n\tStorage = storage1\n\tClient = \"name1\"\n\tFileset = \"fileset1 
\"\n\tMax Wait Time = 5m\n\tWrite Bootstrap = \"/var/lib/bacula/name1-etc.bsr\"\n}\n\n" (using = 
=) 

Как мне сделать, чтобы сделать RSpec и автоиспытания ответить красиво отформатированный дифференциал (если это возможно, раскраски различия между текстами Что-то вроде этого

expected: 
Job { 
    Name = "name1-etc" 
    Type = Backup 
    Messages = Daemon 
    Pool = Default 
    Schedule = "schedule1" 
    Storage = storage1 
    Client = "name1" 
    Fileset = "fileset1" <--diff 
    Max Wait Time = 5m 
    Write Bootstrap = "/var/lib/bacula/name1-etc.bsr" 
} 
got: 
Job { 
    Name = "name1-etc" 
    Type = Backup 
    Messages = Daemon 
    Pool = Default 
    Schedule = "schedule1" 
    Storage = storage1 
    Client = "name1" 
    Fileset = "fileset2" <-- diff 
    Max Wait Time = 5m 
    Write Bootstrap = "/var/lib/bacula/name1-etc.bsr" 
} 
? ..

ответ

1

лучшее решение я нашел это:

module CustomMatchers 
    class HaveTheSameText 
     def initialize(expected) 
     @expected = expected 
     end 

     def matches?(actual) 
     @actual = actual 
     @actual == @expected 
     end 

     def failure_message 
     `diff #{file_for @expected} #{file_for @actual}` 
     end 

     def negative_failure_message 
     "don't apply" 
     end 

    private 
     def file_for text 
     exp = Tempfile.new("bk", "/tmp").open 
     exp.write(text) 
     exp.close 
     exp.path 
     end 
    end 

    def have_the_same_text_of(expected) 
     HaveTheSameText.new(expected) 
    end 
end 

И в моей спецификации я использую

actual.should have_the_same_text_of expected 
+0

пользователей Windows, необходимо поставить Cygwin на своем пути. –

0

Взгляните на то, как сделать Custom Expectation Matchers Вы имеете полный контроль над недостаточностью и отрицательной недостаточностью сообщений с теми

 Смежные вопросы

  • Нет связанных вопросов^_^