vendredi 4 septembre 2020

Laravel: How can I assertJson an array

I am creating a feature test for a Seminar. Everything is working great; I am trying to update my feature test to account for the seminar dates.

Each Seminar can have one or many dates, so I am saving these values as a json field:

// migration:

...

$table->json('dates');

...

Here is what my Seminar model looks like:

// Seminar.php

protected $casts = [
    'dates' => 'array',
];

When saving the seminar, I am returning a json resource:

if ($seminar->save()) {
    return response()->json(new SeminarResource($seminar), 200);
    ...

Using Postman, my Seminar looks a like this:

...

"capacity": 100,
"dates": [
    "2020-10-15",
    "2020-10-16"
],

...

So far so good!

In my test, I am testing that a seminar can be created.

$http->assertStatus(201)

->assertJson([
    'type' => 'seminars',
    'id' => (string)$response->id,
    'attributes' => [
        'dates' => $response->attributes->dates, // General error: 25 column index out of range

I've tried to convert the array to a string, or json_encode the value in the resource. I don't think that's the correct way since I am already casting the value as an array in the model.

How can I assert that my dates is returning an array?

 +"dates": array:2 [
      0 => "2020-10-15"
      1 => "2020-10-16"
    ]

Thank you for your suggestions!

EDIT

When I dd($response->attributes->dates); this is what I'm getting (which is correct).

array:2 [
  0 => "2020-10-15"
  1 => "2020-10-16"
]

What I'm not sure is how to assert an array like that. Since I'm using faker to generate the date, I don't really know (or care) what the date is, just want to assert that it is in fact an array.

I've tried something like:

 'dates' => ['*'],

However, that just adds another element to the array.

EDIT 2

If I make the array a string,

'dates' => json_encode($response->attributes->dates),

I'll get an error like this:


--- Expected
+++ Actual
@@ @@


-    'dates' => '["2020-10-15","2020-10-16"]',
+    'dates' => 
+    array (
+      0 => '2020-10-15',
+      1 => '2020-10-16',
+    ),

Aucun commentaire:

Enregistrer un commentaire