@@ -97,9 +97,9 @@ of the document is represented by ``$``::
97
97
98
98
// $titles is ['Sayings of the Century']
99
99
100
- Dot notation is the default, but JSONPath provides other syntaxes for cases where
101
- it doesn't work. Use bracket notation (``['...'] ``) when a key contains spaces
102
- or special characters::
100
+ Dot notation is the default, but JSONPath provides other syntaxes for cases
101
+ where it doesn't work. Use bracket notation (``['...'] ``) when a key contains
102
+ spaces or special characters::
103
103
104
104
// this is equivalent to the previous example
105
105
$titles = $crawler->find('$["store"]["book"][0]["title"]');
@@ -178,7 +178,8 @@ methods to build your query:
178
178
* :method: `Symfony\\ Component\\ JsonPath\\ JsonPath::index `
179
179
Adds an array index selector. Index numbers start at ``0 ``.
180
180
181
- * :method: `Symfony\\ Component\\ JsonPath\\ JsonPath::first ` / :method: `Symfony\\ Component\\ JsonPath\\ JsonPath::last `
181
+ * :method: `Symfony\\ Component\\ JsonPath\\ JsonPath::first ` /
182
+ :method: `Symfony\\ Component\\ JsonPath\\ JsonPath::last `
182
183
Shortcuts for ``index(0) `` and ``index(-1) `` respectively::
183
184
184
185
// get the last book: '$["store"]["book"][-1]'
@@ -213,6 +214,86 @@ filters, refer to the `Querying with Expressions`_ section above. All these
213
214
features are supported and can be combined with the programmatic builder when
214
215
appropriate (e.g., inside a ``filter() `` expression).
215
216
217
+ Testing with JSON Assertions
218
+ ----------------------------
219
+
220
+ The component provides a set of PHPUnit assertions to make testing JSON data
221
+ more convenient. Use the :class: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait `
222
+ in your test class::
223
+
224
+ use PHPUnit\Framework\TestCase;
225
+ use Symfony\Component\JsonPath\Test\JsonPathAssertionsTrait;
226
+
227
+ class MyTest extends TestCase
228
+ {
229
+ use JsonPathAssertionsTrait;
230
+
231
+ public function testSomething(): void
232
+ {
233
+ $json = '{"books": [{"title": "A"}, {"title": "B"}]}';
234
+
235
+ self::assertJsonPathCount(2, '$.books[*]', $json);
236
+ }
237
+ }
238
+
239
+ The trait provides the following assertion methods:
240
+
241
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathCount `
242
+ Asserts that the number of elements found by the JSONPath expression matches
243
+ an expected count::
244
+
245
+ $json = '{"a": [1, 2, 3]}';
246
+ self::assertJsonPathCount(3, '$.a[*]', $json);
247
+
248
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathEquals `
249
+ Asserts that the result of a JSONPath expression is equal to an expected
250
+ value. The comparison uses ``== `` (type coercion) instead of ``=== ``::
251
+
252
+ $json = '{"a": [1, 2, 3]}';
253
+
254
+ // passes because "1" == 1
255
+ self::assertJsonPathEquals(['1'], '$.a[0]', $json);
256
+
257
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotEquals `
258
+ Asserts that the result of a JSONPath expression is not equal to an expected
259
+ value. The comparison uses ``!= `` (type coercion) instead of ``!== ``::
260
+
261
+ $json = '{"a": [1, 2, 3]}';
262
+ self::assertJsonPathNotEquals([42], '$.a[0]', $json);
263
+
264
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathSame `
265
+ Asserts that the result of a JSONPath expression is identical (``=== ``) to an
266
+ expected value. This is a strict comparison and does not perform type
267
+ coercion::
268
+
269
+ $json = '{"a": [1, 2, 3]}';
270
+
271
+ // fails because "1" !== 1
272
+ // self::assertJsonPathSame(['1'], '$.a[0]', $json);
273
+
274
+ self::assertJsonPathSame([1], '$.a[0]', $json);
275
+
276
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotSame `
277
+ Asserts that the result of a JSONPath expression is not identical (``!== ``) to
278
+ an expected value::
279
+
280
+ $json = '{"a": [1, 2, 3]}';
281
+ self::assertJsonPathNotSame(['1'], '$.a[0]', $json);
282
+
283
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathContains `
284
+ Asserts that a given value is found within the array of results from the
285
+ JSONPath expression::
286
+
287
+ $json = '{"tags": ["php", "symfony", "json"]}';
288
+ self::assertJsonPathContains('symfony', '$.tags[*]', $json);
289
+
290
+ * :method: `Symfony\\ Component\\ JsonPath\\ Test\\ JsonPathAssertionsTrait::assertJsonPathNotContains `
291
+ Asserts that a given value is NOT found within the array of results from the
292
+ JSONPath expression::
293
+
294
+ $json = '{"tags": ["php", "symfony", "json"]}';
295
+ self::assertJsonPathNotContains('java', '$.tags[*]', $json);
296
+
216
297
Error Handling
217
298
--------------
218
299
@@ -223,7 +304,8 @@ The component throws specific exceptions for invalid input or queries:
223
304
* :class: `Symfony\\ Component\\ JsonPath\\ Exception\\ InvalidJsonStringInputException `:
224
305
Thrown during a ``find() `` call if the JSON string is malformed (e.g., syntax error);
225
306
* :class: `Symfony\\ Component\\ JsonPath\\ Exception\\ JsonCrawlerException `:
226
- Thrown for errors within the JsonPath expression itself, such as using an unknown function
307
+ Thrown for errors within the JsonPath expression itself, such as using an
308
+ unknown function
227
309
228
310
Example of handling errors::
229
311
0 commit comments