Как мы тестируем необязательное хеш-поле, используя Test2 :: V0 - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь выяснить, как проверить необязательное хеш-поле, используя Test2 :: V0 .В настоящее время у меня есть следующее:

use 5.016;
use Test2::V0;

subtest 'optional fields in a hash' => sub {
    my $check = hash {
        field foo => qr/^[0-9]+$/;
        field bar => qr/^[a-zA-Z]+$/; # this field is optional
    };

    like(
        { foo => 1 },
        $check,
        'should pass when optional field is omitted',
    );

    like(
        { foo => 2, bar => 'a' },
        $check,
        'should pass when optional field is provided',
    );
};

done_testing;

Теперь, если я опущу чек для необязательного поля:

my $check = hash {
    field foo => qr/^[0-9]+$/;
    # field bar => qr/^[a-zA-Z]+$/; # this field is optional
};

, тест будет пройден.Но я хочу проверить значение, когда оно там.

Есть идеи?

1 Ответ

0 голосов
/ 28 января 2019

См. Test2::Tools::Compare * in_set - у меня работает следующее.Не забудьте также проверить ошибки :-)

use warnings;
use 5.016;
use Test2::V0;

subtest 'optional fields in a hash' => sub {
    my $check = hash {
        field foo => qr/^[0-9]+$/;
        field bar => in_set( DNE(), qr/^[a-zA-Z]+$/ );
    };
    like( { foo => 1 }, $check,
        'should pass when optional field is omitted' );
    like( { foo => 2, bar => 'a' }, $check,
        'should pass when optional field is provided' );
    unlike( { foo => 2, bar => undef }, $check,
        'should fail when optional field is provided with no value' );
    unlike( { foo => 2, bar => '+' }, $check,
        'should fail when optional field is provided with bad value' );
};

done_testing;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...