@@ -234,6 +234,8 @@ private void initializeWriterIfNeeded() {
234234 writer .addDependency (TypeScriptDependency .PROTOCOL_HTTP );
235235 // Add the template to each generated test.
236236 writer .write (IoUtils .readUtf8Resource (getClass (), "protocol-test-stub.ts" ));
237+ writer .addImport ("test" , "it" , TypeScriptDependency .VITEST );
238+ writer .addImport ("expect" , null , TypeScriptDependency .VITEST );
237239 }
238240 }
239241
@@ -466,7 +468,6 @@ private void writeHttpResponseAssertions(HttpMalformedResponseDefinition respons
466468 writer .write ("expect(r.statusCode).toBe($L);" , responseDefinition .getCode ());
467469 responseDefinition .getHeaders ().forEach ((header , value ) -> {
468470 header = header .toLowerCase ();
469- writer .write ("expect(r.headers[$S]).toBeDefined();" , header );
470471 writer .write ("expect(r.headers[$S]).toBe($S);" , header , value );
471472 });
472473 writer .write ("" );
@@ -484,11 +485,20 @@ private void writeHttpResponseAssertions(HttpMalformedResponseDefinition respons
484485
485486 private void writeHttpQueryAssertions (HttpRequestTestCase testCase ) {
486487 testCase .getRequireQueryParams ().forEach (requiredQueryParam ->
487- writer .write ("expect(r.query[$S]).toBeDefined();" , requiredQueryParam ));
488+ writer .write ("""
489+ expect(
490+ r.query[$1S],
491+ `Query key $1S should have been defined in $${JSON.stringify(r.query)}`
492+ ).toBeDefined();""" , requiredQueryParam )
493+ );
488494 writer .write ("" );
489495
490496 testCase .getForbidQueryParams ().forEach (forbidQueryParam ->
491- writer .write ("expect(r.query[$S]).toBeUndefined();" , forbidQueryParam ));
497+ writer .write ("""
498+ expect(
499+ r.query[$1S],
500+ `Query key $1S should have been undefined in $${JSON.stringify(r.query)}`
501+ ).toBeUndefined();""" , forbidQueryParam ));
492502 writer .write ("" );
493503
494504 List <String > explicitQueryValues = testCase .getQueryParams ();
@@ -506,25 +516,31 @@ private void writeHttpQueryAssertions(HttpRequestTestCase testCase) {
506516
507517 private void writeHttpHeaderAssertions (HttpMessageTestCase testCase ) {
508518 testCase .getRequireHeaders ().forEach (requiredHeader -> {
509- writer .write ("expect(r.headers[$S]).toBeDefined();" , requiredHeader .toLowerCase ());
519+ writer .write ("""
520+ expect(
521+ r.headers[$1S],
522+ `Header key $1S should have been defined in $${JSON.stringify(r.headers)}`
523+ ).toBeDefined();""" , requiredHeader .toLowerCase ());
510524 });
511525 writer .write ("" );
512526
513527 testCase .getForbidHeaders ().forEach (forbidHeader ->
514- writer .write ("expect(r.headers[$S]).toBeUndefined();" , forbidHeader .toLowerCase ()));
528+ writer .write ("""
529+ expect(
530+ r.headers[$1S],
531+ `Header key $1S should have been undefined in $${JSON.stringify(r.headers)}`
532+ ).toBeUndefined();""" , forbidHeader .toLowerCase ()));
515533 writer .write ("" );
516534
517535 testCase .getHeaders ().forEach ((header , value ) -> {
518536 header = header .toLowerCase ();
519- writer .write ("expect(r.headers[$S]).toBeDefined();" , header );
520537 writer .write ("expect(r.headers[$S]).toBe($S);" , header , value );
521538 });
522539 writer .write ("" );
523540 }
524541
525542 private void writeHttpHostAssertion (HttpRequestTestCase testCase ) {
526543 testCase .getResolvedHost ().ifPresent (resolvedHost -> {
527- writer .write ("expect(r.headers[\" host\" ]).toBeDefined();" );
528544 writer .write ("expect(r.headers[\" host\" ]).toBe($S);" , resolvedHost );
529545 writer .write ("" );
530546 });
@@ -540,7 +556,7 @@ private void writeHttpBodyAssertions(String body, String mediaType, boolean isCl
540556 }
541557
542558 // Fast fail if we don't have a body.
543- writer .write ("expect(r.body).toBeDefined();" );
559+ writer .write ("expect(r.body, `Body was undefined.` ).toBeDefined();" );
544560
545561 // Otherwise load a media type specific comparator and do a comparison.
546562 String comparatorInvoke = registerBodyComparatorStub (mediaType );
@@ -566,7 +582,7 @@ private void writeHttpBodyAssertions(String body, String mediaType, boolean isCl
566582
567583 private void writeHttpBodyMessageAssertion (String messageRegex , String mediaType ) {
568584 // Fast fail if we don't have a body.
569- writer .write ("expect(r.body).toBeDefined();" );
585+ writer .write ("expect(r.body, `Body was undefined` ).toBeDefined();" );
570586
571587 // Otherwise load a media type specific matcher
572588 String comparatorInvoke = registerMessageRegexStub (mediaType );
@@ -825,7 +841,7 @@ private void writeResponseTestSetup(OperationShape operation, HttpResponseTestCa
825841 private void writeResponseAssertions (Shape operationOrError , HttpResponseTestCase testCase ) {
826842 writer .write ("expect(r['$$metadata'].httpStatusCode).toBe($L);" , testCase .getCode ());
827843
828- writeReponseParamAssertions (operationOrError , testCase );
844+ writeResponseParamAssertions (operationOrError , testCase );
829845 }
830846
831847 private void writeRequestParamAssertions (OperationShape operation , HttpRequestTestCase testCase ) {
@@ -859,7 +875,7 @@ private void writeRequestParamAssertions(OperationShape operation, HttpRequestTe
859875 }
860876 }
861877
862- private void writeReponseParamAssertions (Shape operationOrError , HttpResponseTestCase testCase ) {
878+ private void writeResponseParamAssertions (Shape operationOrError , HttpResponseTestCase testCase ) {
863879 ObjectNode params = testCase .getParams ();
864880 if (!params .isEmpty ()) {
865881 StructureShape testOutputShape ;
@@ -917,7 +933,11 @@ private void writeParamAssertions(
917933
918934 // Perform parameter comparisons.
919935 writer .openBlock ("Object.keys(paramsToValidate).forEach(param => {" , "});" , () -> {
920- writer .write ("expect(r[param]).toBeDefined();" );
936+ writer .write ("""
937+ expect(
938+ r[param],
939+ `The output field $${param} should have been defined in $${JSON.stringify(r, null, 2)}`
940+ ).toBeDefined();""" );
921941 if (hasStreamingPayloadBlob ) {
922942 writer .openBlock ("if (param === $S) {" , "} else {" , payloadBinding .get ().getMemberName (), () ->
923943 writer .write ("""
0 commit comments