Что Laravel литой колонной в формате JSON с помощью функции тестирования тестирование с помощью PHPUnit


Что Laravel литой колонной в формате JSON с помощью функции тестирования тестирование с помощью PHPUnit

03.09.2020 12:43:20 Просмотров 57 Источник

не проходит у меня последний тест, который сравнивает только что введенное поле с отправленным, потому что json

У меня есть следующие поля:

public function up()
        {
            Schema::create('polls', function (Blueprint $table) {
                $table->id();
                $table->text('now');
                $table->json('paramJson');
                $table->enum('status', ['a', 'b', 'c','d'])->default('a');
            });
        }

Модель опроса:

protected $fillable=[
                'now',
           'paramJson',
            ];

//to cast that column from JSON to an array automatically (maybe it doesn't work)
protected $casts = [
                'paramJson' => 'array',
            ];

PollsController.php

public function add(Request $request)
    {
        $poll = Poll::create($request->all());
        return response()->json($poll, 201);
    }

Feature/PollApiTest.php

    $data = [
       "now" => "Will Messi sign for City?",
       "parameters" : {"a"=> "yes", "b"=> "no"},
    ];

    $response = $this->post('/api/polls',$data);//add data in polls

    $response ->assertStatus(201);// assert Ok

    $response->assertJson($data);//assert Ok

    $response = $this->get('/api/poll');//get index polls

$this->assertSame($dataDbTest[0]['paramJson'],$data['paramJson']);//this test fails

последний тест не проходит, потому что ниже ошибка

Не удалось подтвердить этот массив &0 ( 'a' = > 'yes' 'b' = > 'no') идентичен '{"a":" yes"," b":"no"}'.

если последний тест я делаю с помощью json_encode:

$this->assertSame($dataDbTest[0]['paramJson'],json_encode($data['paramJson']));

--- Expected
+++ Actual @@ @@
-'{"a": "yes", "b": "no"}'
+'{"a":"yes","b":"no"}'
У вопроса есть решение - Посмотреть?

Ответы - Что Laravel литой колонной в формате JSON с помощью функции тестирования тестирование с помощью PHPUnit / LARAVEL cast colums JSON with feature test phpunit

Является ответом!
Gianmarco Gagliardi

04.09.2020 12:08:58

Я думаю, что это должно быть так

$this->assertSame(json_decode($dataDbTest[0]['paramJson']),$data['paramJson']);

json_decode

Помочь в развитии проекта:
Закрыть X