Подтвердить что ты не робот

Как получить intellij, чтобы предложить сравнение сравнения текста при неудачных тестах

Я пишу тест Scala с некоторыми соглашателями ScalaTest.

Когда мой тест терпит неудачу, intellij говорит что-то вроде

{"count":3,"pagination":{"offset":0,"limit":100},"content":{"uri":"http://locahost.com/catalogue/content?order=Query&id=18,20,19"},"list":[{"id":"18","position":27},{"id":"20","position":341},{"id":"19","position":33}]} was not equal to {"count":3,"pagination":{"offset":0,"limit":100},"content":{"uri":"http://locahost.com/catalogue/content?order=Query&id=18,20,19"},"list":[{"id":"18","timestamp":"2015-01-28T11:55:44.494Z","content":"Episode","position":27},{"id":"20","timestamp":"2015-01-19T11:55:44.494Z","content":"Program","position":341},{"id":"19","timestamp":"2015-01-17T11:55:44.494Z","content":"Episode","position":33}]}
org.scalatest.exceptions.TestFailedException: {"count":3,"pagination":{"offset":0,"limit":100},"content":{"uri":"http://locahost.com/catalogue/content?order=Query&id=18,20,19"},"list":[{"id":"18","position":27},{"id":"20","position":341},{"id":"19","position":33}]} was not equal to {"count":3,"pagination":{"offset":0,"limit":100},"content":{"uri":"http://locahost.com/catalogue/content?order=Query&id=18,20,19"},"list":[{"id":"18","timestamp":"2015-01-28T11:55:44.494Z","content":"Episode","position":27},{"id":"20","timestamp":"2015-01-19T11:55:44.494Z","content":"Program","position":341},{"id":"19","timestamp":"2015-01-17T11:55:44.494Z","content":"Episode","position":33}]}
at    org.scalatest.MatchersHelper$.newTestFailedException(MatchersHelper.scala:160)
at org.scalatest.Matchers$ShouldMethodHelper$.shouldMatcher(Matchers.scala:6231)
at org.scalatest.Matchers$AnyShouldWrapper.should(Matchers.scala:6265)
...

Однако, intellij не дает мне удобных различий в текстовой функции.

Я думал, что это может быть потому, что я сравниваю 2 объекта

  val responseBody = responseAs[JsValue]
  responseBody should be(viewingByAccountIdResponseJson)

но изменив его на

assert(responseBody.toString() === viewingByAccountIdResponseJson.toString())

Не позволяет мне выполнять текстовое сравнение.

Есть ли способ настроить intellij для этого?

(В настоящее время я использую FlatSpec с Matchers)

Примечание. Это связано с этим вопросом Форматирование вывода, чтобы Intellij Idea показывала различия для двух текстов

Однако, даже используя синтаксис, рекомендуемый для intellij, он не работает.

4b9b3361

Ответ 1

Я вижу, что это невозможно в данный момент и с текущего момента времени, это запрос функции:

https://youtrack.jetbrains.com/issue/SCL-4867

Ответ 2

Поскольку запрос функции intellij, упомянутый Брюсом, отмечает его 7-й день рождения, некоторые из нас потеряли надежду (все еще не забывая об этом +1). Здесь уродливый скрипт, который позволяет немного смягчить проблему. Просто скопируйте строку This was not equal to That и введите ее в stdin этого скрипта:

| scalatest-diff
cat > ~/bin/scalatest-diff
#!/usr/bin/perl

my $in = join("", <STDIN>);
if( $in =~ m/[^:]+\: (.+?) was not equal to (.+)/so ) {
    my $this = $1;
    my $that = $2;
    $this =~ s/,/,\n/g;
    $that =~ s/,/,\n/g;
    open(thisFile, ">", "/tmp/this");
    open(thatFile, ">", "/tmp/that");
    print thisFile $this; close thisFile;
    print thatFile $that; close thatFile;
    exec("vimdiff /tmp/this /tmp/that");
}
<Ctrl-D>
chmod a+x ~/bin/scalatest-diff

P.S. не стесняйтесь менять vimdiff, чтобы ваш любимый отличался.