RSpe c формат DateTime в ответе отличается от переданного атрибута - PullRequest
2 голосов
/ 04 августа 2020

Я хочу проверить, правильно ли сериализован ответ (я использую сериализатор Fast JSON API). Для этого я создал образец ответа, который хочу сравнить:

let!(:journey_progress) { create(:journey_progress, started_at: current_date) }

let(:current_date) { 'Thu, 16 Jul 2020 17:08:02 +0200' }

let(:serializer_response) do
{
  'data' => [
    {
      'id' => 1,
      'type' => 'percent_progress',
      'attributes' => {
        'percent_progress' => 0.5,
        'started_at' => current_date,
      }
    }
  ],
}
end

it 'serializes journey with proper serializer' do
  call
  expect(JSON.parse(response.body)).to eq(serializer_response)
end

В ответе я получаю:

-"data" => [{"attributes"=>{"percent_progress"=>0.5, "started_at"=>"Thu, 16 Jul 2020 17:08:02 +0200"}],
+"data" => [{"attributes"=>{"percent_progress"=>0.5, "started_at"=>"2020-07-16T15:08:02.000Z"}],

Что это за формат 2020-07-16T15:08:02.000Z и почему он не в том же формате, который я передал созданному объекту journey_progress?

1 Ответ

1 голос
/ 04 августа 2020

Rails использует ISO 8601 как формат по умолчанию JSON сериализацию для объектов Time .

Кроме того, лучше не полагаться на синтаксический анализ времени ActiveRecord и использовать тот же объект Time либо для ожидания, либо для создания записи:

let(:current_date) { Time.parse('Thu, 16 Jul 2020 17:08:02 +0200') }

let(:serializer_response) do
{
  'data' => [
    {
      'id' => 1,
      'type' => 'percent_progress',
      'attributes' => {
        'percent_progress' => 0.5,
        'started_at' => current_date.utc.as_json,
      }
    }
  ],
}
...