diff --git a/t/test/mojo.t b/t/test/mojo.t
index f4f00cfdb3..57ac5ac8c9 100644
--- a/t/test/mojo.t
+++ b/t/test/mojo.t
@@ -3,8 +3,11 @@ use Mojo::Base -strict;
 use Test::More;
 use Test::Mojo;
 use Mojolicious::Lite;
+use Mojo::JSON qw/encode_json decode_json/;
 
 any '/' => {text => 'Hello Test!'};
+my $example_json = {test => ['hello', 'bye']};
+any '/json' => {json => $example_json};
 
 my $t = Test::Mojo->new;
 
@@ -217,4 +220,97 @@ subtest 'header_unlike' => sub {
   is_deeply \@args, ['unlike', 'text/html;charset=UTF-8', qr/image\/png/, 'some description'], 'right result';
 };
 
+subtest 'json_has' => sub {
+  $t->get_ok('/json')->status_is(200)->json_has('/test/0');
+  is_deeply \@args, ['ok', !!1, 'has value for JSON Pointer "/test/0"'], 'Checking json_has is true.';
+  $t->get_ok('/json')->status_is(200)->json_has('/test/0', 'some description');
+  is_deeply \@args, ['ok', !!1, 'some description'],
+    'Checking json_has is true and the test message is correctly printed.';
+  $t->get_ok('/json')->status_is(200)->json_has('/test0');
+  is_deeply \@args, ['ok', !!0, 'has value for JSON Pointer "/test0"'], 'Checking json_has is false.';
+};
+
+subtest 'json_hasnt' => sub {
+  $t->get_ok('/json')->status_is(200)->json_hasnt('/test/0');
+  is_deeply \@args, ['ok', !!0, 'has no value for JSON Pointer "/test/0"'], 'Checking json_hasnt is false.';
+  $t->get_ok('/json')->status_is(200)->json_hasnt('/test/0', 'some description');
+  is_deeply \@args, ['ok', !!0, 'some description'], 'Checking correct test message in json_hasnt.';
+  $t->get_ok('/json')->status_is(200)->json_hasnt('/test0');
+  is_deeply \@args, ['ok', !!1, 'has no value for JSON Pointer "/test0"'], 'Checking json_hasnt is true.';
+};
+
+subtest 'json_is' => sub {
+  $t->get_ok('/json')->status_is(200)->json_is('/test' => ['hello', 'bye']);
+  is_deeply \@args, ['is_deeply', (['hello', 'bye']) x 2, 'exact match for JSON Pointer "/test"'], 'json_is true case.';
+  $t->get_ok('/json')->status_is(200)->json_is('/test' => ['hello', 'bye'], 'some description');
+  is_deeply \@args, ['is_deeply', (['hello', 'bye']) x 2, 'some description'], 'Test message for json_is matches.';
+  $t->get_ok('/json')->status_is(200)->json_is('/test' => ['hello', 'goodbye']);
+  is_deeply \@args, ['is_deeply', ['hello', 'bye'], ['hello', 'goodbye'], 'exact match for JSON Pointer "/test"'],
+    'Correct parameters json_is.';
+};
+
+subtest 'json_like' => sub {
+  $t->get_ok('/json')->status_is(200)->json_like('/test/0' => qr/^he/);
+  is_deeply \@args, ['like', 'hello', qr/^he/, 'similar match for JSON Pointer "/test/0"'],
+    'json_like matches arguments and contents.';
+  $t->get_ok('/json')->status_is(200)->json_like('/test/0' => qr/^he/, 'some description');
+  is_deeply \@args, ['like', 'hello', qr/^he/, 'some description'], 'json_like prints the correct test message.';
+};
+
+subtest 'json_unlike' => sub {
+  $t->get_ok('/json')->status_is(200)->json_unlike('/test/0' => qr/^he/);
+  is_deeply \@args, ['unlike', 'hello', qr/^he/, 'no similar match for JSON Pointer "/test/0"'],
+    'json_unlike matches arguments and contents.';
+  $t->get_ok('/json')->status_is(200)->json_unlike('/test/0' => qr/^he/, 'some description');
+  is_deeply \@args, ['unlike', 'hello', qr/^he/, 'some description'], 'Correct message printed in json_unlike.';
+};
+
+subtest 'json_message_has' => sub {
+  $t->message([text => encode_json($example_json)])->json_message_has('/test');
+  is_deeply \@args, ['ok', !!1, 'has value for JSON Pointer "/test"'], 'json_message_has is true.';
+  $t->message([text => encode_json($example_json)])->json_message_has('/test', 'some description');
+  is_deeply \@args, ['ok', !!1, 'some description'], 'json_message_has prints the correct test message.';
+  $t->message([text => encode_json($example_json)])->json_message_has('/test0');
+  is_deeply \@args, ['ok', undef, 'has value for JSON Pointer "/test0"'], 'json_message_has is false.';
+};
+
+subtest 'json_message_hasnt' => sub {
+  $t->message([text => encode_json($example_json)])->json_message_hasnt('/test');
+  is_deeply \@args, ['ok', !!0, 'has no value for JSON Pointer "/test"'], 'json_message_hasnt is false.';
+  $t->message([text => encode_json($example_json)])->json_message_hasnt('/test', 'some description');
+  is_deeply \@args, ['ok', !!0, 'some description'], 'json_message_hasnt prints the correct test message.';
+  $t->message([text => encode_json($example_json)])->json_message_hasnt('/test0');
+  is_deeply \@args, ['ok', !!1, 'has no value for JSON Pointer "/test0"'], 'json_message_hasnt is false.';
+};
+
+subtest 'json_message_is' => sub {
+  $t->message([text => encode_json($example_json)])->json_message_is('/test', => ['hello', 'bye']);
+  is_deeply \@args, ['is_deeply', (['hello', 'bye']) x 2, 'exact match for JSON Pointer "/test"'],
+    'json_message_is works in the true case.';
+  $t->message([text => encode_json($example_json)])->json_message_is('/test', => ['hello', 'bye'], 'some description');
+  is_deeply \@args, ['is_deeply', (['hello', 'bye']) x 2, 'some description'],
+    'json_message_is prints the correct test message.';
+  $t->message([text => encode_json($example_json)])->json_message_is('/test', => ['hello', 'goodbye'],);
+  is_deeply \@args, ['is_deeply', ['hello', 'bye'], ['hello', 'goodbye'], 'exact match for JSON Pointer "/test"'],
+    'Correct parameters in json_message_is.';
+};
+
+subtest 'json_message_like' => sub {
+  $t->message([text => encode_json($example_json)])->json_message_like('/test/0', => qr/^he/);
+  is_deeply \@args, ['like', 'hello', qr/^he/, 'similar match for JSON Pointer "/test/0"'],
+    'json_message_like works as expected.';
+  $t->message([text => encode_json($example_json)])->json_message_like('/test/0', => qr/^he/, 'some description');
+  is_deeply \@args, ['like', 'hello', qr/^he/, 'some description'],
+    'json_message_like prints the correct test message.';
+};
+
+subtest 'json_message_unlike' => sub {
+  $t->message([text => encode_json($example_json)])->json_message_unlike('/test/0', => qr/^he/);
+  is_deeply \@args, ['unlike', 'hello', qr/^he/, 'no similar match for JSON Pointer "/test/0"'],
+    'json_message_unlike works as expected.';
+  $t->message([text => encode_json($example_json)])->json_message_unlike('/test/0', => qr/^he/, 'some description');
+  is_deeply \@args, ['unlike', 'hello', qr/^he/, 'some description'],
+    'json_message_unlike prints the correct test message.';
+};
+
 done_testing();