Как сравнить JSON с Test :: Deep? - PullRequest
2 голосов
/ 20 января 2020

Когда я запускаю следующий код:

use strict;
use warnings;
use Test::Deep;
use Test::Deep::JSON;

cmp_deeply(json("{}"), json("{}"));

Я получаю

Found a special comparison in $data
You can only use specials in the expects structure at /usr/local/share/perl/5.26.1/Test/Deep.pm line 348.
    Test::Deep::descend(Test::Deep::JSON=HASH(0x5559ec3b3810), Test::Deep::JSON=HASH(0x5559ecb236a8)) called at /usr/local/share/perl/5.26.1/Test/Deep.pm line 221
    Test::Deep::cmp_details(Test::Deep::JSON=HASH(0x5559ec3b3810), Test::Deep::JSON=HASH(0x5559ecb236a8)) called at /usr/local/share/perl/5.26.1/Test/Deep.pm line 202
    Test::Deep::cmp_deeply(Test::Deep::JSON=HASH(0x5559ec3b3810), Test::Deep::JSON=HASH(0x5559ecb236a8)) called at jsondiff.pl line 6

Почему это так и как я могу сравнить две JSON строки?

1 Ответ

3 голосов
/ 20 января 2020
use Test::More tests => 1;

use Test::Deep;
use Test::Deep::JSON;

my $json_to_check = '{}';

cmp_deeply($json_to_check, json({}));

Если вы хотите начать с JSON, просто расшифруйте его перед передачей на json.

use feature qw( state );

use Test::More tests => 1;

use Test::Deep;
use Test::Deep::JSON;

use Cpanel::JSON::XS qw( );

sub from_json {
   state $json = Cpanel::JSON::XS->new();
   return $json->decode($_[0]);
}

my $json_to_check = '{}';

cmp_deeply($json_to_check, json(from_json('{}')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...