@@ -213,6 +213,78 @@ filters, please refer to the `Querying with Expressions`_ section above. All the
213
213
features are supported and can be combined with the programmatic builder where
214
214
appropriate (e.g., inside a ``filter() `` expression).
215
215
216
+ Testing with JSON Assertions
217
+ ----------------------------
218
+
219
+ The component provides a set of PHPUnit assertions to make testing JSON data more convenient. To use them, include the
220
+ :class: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait ` in your test class::
221
+
222
+ use PHPUnit\Framework\TestCase;
223
+ use Symfony\Component\JsonPath\Test\JsonPathAssertionsTrait;
224
+
225
+ class MyTest extends TestCase
226
+ {
227
+ use JsonPathAssertionsTrait;
228
+
229
+ public function testSomething(): void
230
+ {
231
+ $json = '{"books": [{"title": "A"}, {"title": "B"}]}';
232
+
233
+ self::assertJsonPathCount(2, '$.books[*]', $json);
234
+ }
235
+ }
236
+
237
+ The trait provides the following assertion methods:
238
+
239
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathCount `
240
+ Asserts that the number of elements found by the JSONPath expression matches an expected count::
241
+
242
+ $json = '{"a": [1, 2, 3]}';
243
+ self::assertJsonPathCount(3, '$.a[*]', $json);
244
+
245
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathEquals `
246
+ Asserts that the result of a JSONPath expression is equal (``== ``) to an expected value. This assertion uses type coercion::
247
+
248
+ $json = '{"a": [1, 2, 3]}';
249
+
250
+ // passes because "1" == 1
251
+ self::assertJsonPathEquals(['1'], '$.a[0]', $json);
252
+
253
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotEquals `
254
+ Asserts that the result of a JSONPath expression is not equal (``!= ``) to an expected value::
255
+
256
+ $json = '{"a": [1, 2, 3]}';
257
+ self::assertJsonPathNotEquals([42], '$.a[0]', $json);
258
+
259
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathSame `
260
+ Asserts that the result of a JSONPath expression is identical (``=== ``) to an expected value. This is a strict comparison and does not perform type coercion::
261
+
262
+ $json = '{"a": [1, 2, 3]}';
263
+
264
+ // fails because "1" !== 1
265
+ // self::assertJsonPathSame(['1'], '$.a[0]', $json);
266
+
267
+ self::assertJsonPathSame([1], '$.a[0]', $json);
268
+
269
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotSame `
270
+ Asserts that the result of a JSONPath expression is not identical (``!== ``) to an expected value::
271
+
272
+ $json = '{"a": [1, 2, 3]}';
273
+ self::assertJsonPathNotSame(['1'], '$.a[0]', $json);
274
+
275
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathContains `
276
+ Asserts that a given value is found within the array of results from the JSONPath expression::
277
+
278
+ $json = '{"tags": ["php", "symfony", "json"]}';
279
+ self::assertJsonPathContains('symfony', '$.tags[*]', $json);
280
+
281
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotContains `
282
+ Asserts that a given value is NOT found within the array of results from the JSONPath expression::
283
+
284
+ $json = '{"tags": ["php", "symfony", "json"]}';
285
+ self::assertJsonPathNotContains('java', '$.tags[*]', $json);
286
+
287
+
216
288
Error Handling
217
289
--------------
218
290
0 commit comments