Ответ 1
Я вижу, что это невозможно в данный момент и с текущего момента времени, это запрос функции:
Я пишу тест 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, он не работает.
Я вижу, что это невозможно в данный момент и с текущего момента времени, это запрос функции:
Поскольку запрос функции 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, чтобы ваш любимый отличался.