Rails 3.2.8 + FactoryGirl + RABL: различия в том, как возвращается дата и время

У меня есть следующая фабрика:

FactoryGirl.define do
  factory :location do |f|
    f.descrizione { Faker::Company.name }
    f.indirizzo { 'Yellow submarine lane, 1'}
    f.citta { 'Nowhereland' }
    f.cap { '0100' }
    f.provincia { 'ZZ' }
  end
end

и следующую спецификацию:

describe "/api/v1/clients/:client_id/locations.json", :type => :api do
  let(:client) { FactoryGirl.create(:client) }
  let(:url) { "/api/v1/locations" }

  describe 'Locations index' do
   it_behaves_like "requires a client"

   def do_verb
     get url+".json", client_id: client.id
   end

   describe "fetches all locations for a given client" do
    it "returns an empty array of locations when client has no locations" do
      do_verb
      body = JSON.parse(last_response.body)
      body.should eq([])
    end

    it "returns an array with client's locations" do
      location = FactoryGirl.create(:location)
      client.locations << location
      client.save
      do_verb
      body = JSON.parse(last_response.body)
      location_params = location.attributes
      body.should eq([location_params])
    end
  end
end
...

Теперь все работает, как и ожидалось (без каламбура), за исключением сравнения между полями :created_at и :updated_at того, что находится внутри тела, и того, что исходит от FactoryGirl (location_params).

Ошибка, которую я получаю при запуске спецификации, выглядит следующим образом:

   Diff:
   @@ -5,6 +5,6 @@
      "cap"=>"01000",
      "citta"=>"Nowhereland",
      "provincia"=>"ZZ",
   -  "created_at"=>Sat, 15 Sep 2012 16:39:13 UTC +00:00,
   -  "updated_at"=>Sat, 15 Sep 2012 16:39:13 UTC +00:00}]
   +  "created_at"=>"2012-09-15T16:39:13Z",
   +  "updated_at"=>"2012-09-15T16:39:13Z"}]

Как видите, и created_at, и updated_at в теле ответа представлены иначе, чем то, что возвращает FactoryGirl.

Что мне здесь явно не хватает?

Заранее спасибо за вашу помощь


person CarmineM74    schedule 15.09.2012    source источник


Ответы (1)


JSON не имеет типа даты/времени — все даты/время представлены в виде строк в ISO8601. формат. Поэтому, как только данные были закодированы и декодированы из JSON, вы в конечном итоге сравниваете объект DateTime со строкой.

person AlexT    schedule 04.07.2014